浏览代码

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>
Martin Brandenburg 9 年之前
父节点
当前提交
680908e504
共有 3 个文件被更改,包括 11 次插入7 次删除
  1. 4 1
      fs/orangefs/downcall.h
  2. 3 5
      fs/orangefs/orangefs-sysfs.c
  3. 4 1
      fs/orangefs/upcall.h

+ 4 - 1
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

+ 3 - 5
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

+ 4 - 1
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];
 };