From 680908e5046bdd37a678691d881d98486c3e9a53 Mon Sep 17 00:00:00 2001 From: Martin Brandenburg Date: Tue, 2 Aug 2016 16:33:34 -0400 Subject: orangefs: turn param response value into union This will support a upcoming request where two related values need to be updated atomically. This was done without a union in the OrangeFS server source already. Since that will break the kernel protocol, it has been fixed there and done here in a way that does not break the kernel protocol. Signed-off-by: Martin Brandenburg diff --git a/fs/orangefs/downcall.h b/fs/orangefs/downcall.h index 66b9921..db6e872 100644 --- a/fs/orangefs/downcall.h +++ b/fs/orangefs/downcall.h @@ -83,7 +83,10 @@ struct orangefs_listxattr_response { }; struct orangefs_param_response { - __s64 value; + union { + __s64 value64; + __s32 value32[2]; + } u; }; #define PERF_COUNT_BUF_SIZE 4096 diff --git a/fs/orangefs/orangefs-sysfs.c b/fs/orangefs/orangefs-sysfs.c index 375708c..044ca65 100644 --- a/fs/orangefs/orangefs-sysfs.c +++ b/fs/orangefs/orangefs-sysfs.c @@ -949,10 +949,8 @@ static int sysfs_service_op_show(char *kobj_id, char *buf, void *attr) out: if (!rc) { if (strcmp(kobj_id, PC_KOBJ_ID)) { - rc = scnprintf(buf, - PAGE_SIZE, - "%d\n", - (int)new_op->downcall.resp.param.value); + rc = scnprintf(buf, PAGE_SIZE, "%d\n", + (int)new_op->downcall.resp.param.u.value64); } else { rc = scnprintf( buf, @@ -1277,7 +1275,7 @@ static int sysfs_service_op_store(char *kobj_id, const char *buf, void *attr) new_op->upcall.req.param.type = ORANGEFS_PARAM_REQUEST_SET; - new_op->upcall.req.param.value = val; + new_op->upcall.req.param.u.value64 = val; /* * The service_operation will return a errno return code on diff --git a/fs/orangefs/upcall.h b/fs/orangefs/upcall.h index 03a4360..7c29fdf 100644 --- a/fs/orangefs/upcall.h +++ b/fs/orangefs/upcall.h @@ -187,7 +187,10 @@ enum orangefs_param_request_op { struct orangefs_param_request_s { enum orangefs_param_request_type type; enum orangefs_param_request_op op; - __s64 value; + union { + __s64 value64; + __s32 value32[2]; + } u; char s_value[ORANGEFS_MAX_DEBUG_STRING_LEN]; }; -- cgit v0.10.2