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>
This commit is contained in:
Родитель
a6dff80a96
Коммит
680908e504
|
@ -83,7 +83,10 @@ struct orangefs_listxattr_response {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct orangefs_param_response {
|
struct orangefs_param_response {
|
||||||
__s64 value;
|
union {
|
||||||
|
__s64 value64;
|
||||||
|
__s32 value32[2];
|
||||||
|
} u;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PERF_COUNT_BUF_SIZE 4096
|
#define PERF_COUNT_BUF_SIZE 4096
|
||||||
|
|
|
@ -949,10 +949,8 @@ static int sysfs_service_op_show(char *kobj_id, char *buf, void *attr)
|
||||||
out:
|
out:
|
||||||
if (!rc) {
|
if (!rc) {
|
||||||
if (strcmp(kobj_id, PC_KOBJ_ID)) {
|
if (strcmp(kobj_id, PC_KOBJ_ID)) {
|
||||||
rc = scnprintf(buf,
|
rc = scnprintf(buf, PAGE_SIZE, "%d\n",
|
||||||
PAGE_SIZE,
|
(int)new_op->downcall.resp.param.u.value64);
|
||||||
"%d\n",
|
|
||||||
(int)new_op->downcall.resp.param.value);
|
|
||||||
} else {
|
} else {
|
||||||
rc = scnprintf(
|
rc = scnprintf(
|
||||||
buf,
|
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.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
|
* The service_operation will return a errno return code on
|
||||||
|
|
|
@ -187,7 +187,10 @@ enum orangefs_param_request_op {
|
||||||
struct orangefs_param_request_s {
|
struct orangefs_param_request_s {
|
||||||
enum orangefs_param_request_type type;
|
enum orangefs_param_request_type type;
|
||||||
enum orangefs_param_request_op op;
|
enum orangefs_param_request_op op;
|
||||||
__s64 value;
|
union {
|
||||||
|
__s64 value64;
|
||||||
|
__s32 value32[2];
|
||||||
|
} u;
|
||||||
char s_value[ORANGEFS_MAX_DEBUG_STRING_LEN];
|
char s_value[ORANGEFS_MAX_DEBUG_STRING_LEN];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче