libceph: improve packing in struct ceph_osd_req_op
authorAlex Elder <elder@inktank.com>
Thu, 14 Feb 2013 18:16:43 +0000 (12:16 -0600)
committerAlex Elder <elder@inktank.com>
Mon, 18 Feb 2013 18:19:07 +0000 (12:19 -0600)
The layout of struct ceph_osd_req_op leaves lots of holes.
Rearranging things a little for better field alignment
reduces the size by a third.

This resolves:
    http://tracker.ceph.com/issues/4163

Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
include/linux/ceph/osd_client.h

index 69287ccfe68a5a5be24a87f3e788620ab0997d20..82bf6338d6c170e8d041d0e2a53b8cce82d58642 100644 (file)
@@ -157,6 +157,7 @@ struct ceph_osd_client {
 
 struct ceph_osd_req_op {
        u16 op;           /* CEPH_OSD_OP_* */
+       u32 payload_len;
        union {
                struct {
                        u64 offset, length;
@@ -165,23 +166,24 @@ struct ceph_osd_req_op {
                } extent;
                struct {
                        const char *name;
-                       u32 name_len;
                        const char  *val;
+                       u32 name_len;
                        u32 value_len;
                        __u8 cmp_op;       /* CEPH_OSD_CMPXATTR_OP_* */
                        __u8 cmp_mode;     /* CEPH_OSD_CMPXATTR_MODE_* */
                } xattr;
                struct {
                        const char *class_name;
-                       __u8 class_len;
                        const char *method_name;
-                       __u8 method_len;
-                       __u8 argc;
                        const char *indata;
                        u32 indata_len;
+                       __u8 class_len;
+                       __u8 method_len;
+                       __u8 argc;
                } cls;
                struct {
-                       u64 cookie, count;
+                       u64 cookie;
+                       u64 count;
                } pgls;
                struct {
                        u64 snapid;
@@ -189,12 +191,11 @@ struct ceph_osd_req_op {
                struct {
                        u64 cookie;
                        u64 ver;
-                       __u8 flag;
                        u32 prot_ver;
                        u32 timeout;
+                       __u8 flag;
                } watch;
        };
-       u32 payload_len;
 };
 
 extern int ceph_osdc_init(struct ceph_osd_client *osdc,