diff options
author | Martin Brandenburg <martin@omnibond.com> | 2016-08-02 16:33:34 -0400 |
---|---|---|
committer | Martin Brandenburg <martin@omnibond.com> | 2016-08-08 15:12:28 -0400 |
commit | 680908e5046bdd37a678691d881d98486c3e9a53 (patch) | |
tree | 3a673c904db260dbb81fa423e844d898eda7c671 | |
parent | a6dff80a964176daca0d41492a6ca280d2246324 (diff) | |
download | lwn-680908e5046bdd37a678691d881d98486c3e9a53.tar.gz lwn-680908e5046bdd37a678691d881d98486c3e9a53.zip |
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 <martin@omnibond.com>
-rw-r--r-- | fs/orangefs/downcall.h | 5 | ||||
-rw-r--r-- | fs/orangefs/orangefs-sysfs.c | 8 | ||||
-rw-r--r-- | fs/orangefs/upcall.h | 5 |
3 files changed, 11 insertions, 7 deletions
diff --git a/fs/orangefs/downcall.h b/fs/orangefs/downcall.h index 66b99210f1f9..db6e8722a89e 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 375708c2db87..044ca6506775 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 03a4360dcd38..7c29fdf08ec5 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]; }; |