diff options
Diffstat (limited to 'fs/ceph/osd_client.c')
-rw-r--r-- | fs/ceph/osd_client.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/fs/ceph/osd_client.c b/fs/ceph/osd_client.c index c5d818e73add..0edb43f1ef26 100644 --- a/fs/ceph/osd_client.c +++ b/fs/ceph/osd_client.c | |||
@@ -161,6 +161,7 @@ static int op_needs_trail(int op) | |||
161 | case CEPH_OSD_OP_GETXATTR: | 161 | case CEPH_OSD_OP_GETXATTR: |
162 | case CEPH_OSD_OP_SETXATTR: | 162 | case CEPH_OSD_OP_SETXATTR: |
163 | case CEPH_OSD_OP_CMPXATTR: | 163 | case CEPH_OSD_OP_CMPXATTR: |
164 | case CEPH_OSD_OP_CALL: | ||
164 | return 1; | 165 | return 1; |
165 | default: | 166 | default: |
166 | return 0; | 167 | return 0; |
@@ -301,6 +302,23 @@ static void osd_req_encode_op(struct ceph_osd_request *req, | |||
301 | ceph_pagelist_append(req->r_trail, src->xattr.val, | 302 | ceph_pagelist_append(req->r_trail, src->xattr.val, |
302 | src->xattr.value_len); | 303 | src->xattr.value_len); |
303 | break; | 304 | break; |
305 | case CEPH_OSD_OP_CALL: | ||
306 | BUG_ON(!req->r_trail); | ||
307 | |||
308 | dst->cls.class_len = src->cls.class_len; | ||
309 | dst->cls.method_len = src->cls.method_len; | ||
310 | dst->cls.indata_len = cpu_to_le32(src->cls.indata_len); | ||
311 | |||
312 | ceph_pagelist_append(req->r_trail, src->cls.class_name, | ||
313 | src->cls.class_len); | ||
314 | ceph_pagelist_append(req->r_trail, src->cls.method_name, | ||
315 | src->cls.method_len); | ||
316 | ceph_pagelist_append(req->r_trail, src->cls.indata, | ||
317 | src->cls.indata_len); | ||
318 | break; | ||
319 | case CEPH_OSD_OP_ROLLBACK: | ||
320 | dst->snap.snapid = cpu_to_le64(src->snap.snapid); | ||
321 | break; | ||
304 | case CEPH_OSD_OP_STARTSYNC: | 322 | case CEPH_OSD_OP_STARTSYNC: |
305 | break; | 323 | break; |
306 | default: | 324 | default: |