ceph: allow preferred osd to be get/set via layout ioctl
authorSage Weil <sage@newdream.net>
Wed, 2 Dec 2009 22:42:39 +0000 (14:42 -0800)
committerSage Weil <sage@newdream.net>
Thu, 3 Dec 2009 22:59:48 +0000 (14:59 -0800)
There is certainly no reason not to report this.

The only real downside to allowing the user to set it is that you don't
get default values by zeroing the layout struct (the default is -1).

Signed-off-by: Sage Weil <sage@newdream.net>
fs/ceph/ioctl.c
fs/ceph/ioctl.h

index 4c33e19fc2412a342cebb0050298da9f7c67fd14..8a5bcae6284631cc6f020c1f71e03b8eb6e0821e 100644 (file)
@@ -24,6 +24,8 @@ static long ceph_ioctl_get_layout(struct file *file, void __user *arg)
                l.stripe_count = ceph_file_layout_stripe_count(ci->i_layout);
                l.object_size = ceph_file_layout_object_size(ci->i_layout);
                l.data_pool = le32_to_cpu(ci->i_layout.fl_pg_pool);
+               l.preferred_osd =
+                       (s32)le32_to_cpu(ci->i_layout.fl_pg_preferred);
                if (copy_to_user(arg, &l, sizeof(l)))
                        return -EFAULT;
        }
@@ -79,7 +81,8 @@ static long ceph_ioctl_set_layout(struct file *file, void __user *arg)
        req->r_args.setlayout.layout.fl_object_size =
                cpu_to_le32(l.object_size);
        req->r_args.setlayout.layout.fl_pg_pool = cpu_to_le32(l.data_pool);
-       req->r_args.setlayout.layout.fl_pg_preferred = cpu_to_le32((s32)-1);
+       req->r_args.setlayout.layout.fl_pg_preferred =
+               cpu_to_le32(l.preferred_osd);
 
        err = ceph_mdsc_do_request(mdsc, parent_inode, req);
        ceph_mdsc_put_request(req);
index 3c511dab373042e35455ee2ae8fd84b31025f86b..25e4f1a9d059dbf74e1dc10489ff93d74bc34924 100644 (file)
@@ -10,6 +10,7 @@
 struct ceph_ioctl_layout {
        __u64 stripe_unit, stripe_count, object_size;
        __u64 data_pool;
+       __s64 preferred_osd;
 };
 
 #define CEPH_IOC_GET_LAYOUT _IOR(CEPH_IOCTL_MAGIC, 1,          \