]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: include object name in DATALOC ioctl result
authorSage Weil <sage@newdream.net>
Mon, 21 Sep 2009 23:40:00 +0000 (16:40 -0700)
committerSage Weil <sage@newdream.net>
Mon, 21 Sep 2009 23:40:00 +0000 (16:40 -0700)
src/client/test_ioctls.c
src/kernel/ioctl.c
src/kernel/ioctl.h

index 93b9bcc4d4ec0dde577d64d8561ede00877bb6d6..fdbbc6c30f9b6dc184a463f094abf79247ff95f9 100644 (file)
@@ -55,9 +55,10 @@ int main(int argc, char **argv)
                return 1;
        }
 
-       printf("dataloc: file_offset %lld\n", dl.file_offset);
-       printf(" object_offset %lld\n object_size %lld object_no %lld\n",
-              dl.object_offset, dl.object_size, dl.object_no);
+       printf("dataloc:\n");
+       printf(" file_offset %lld (of object start)\n", dl.file_offset);
+       printf(" object '%s'\n object_offset %lld\n object_size %lld object_no %lld\n",
+              dl.object_name, dl.object_offset, dl.object_size, dl.object_no);
        printf(" block_offset %lld\n block_size %lld\n",
               dl.block_offset, dl.block_size);
        printf(" osd%lld %u.%u.%u.%u:%u\n", dl.osd, IPQUADPORT(dl.osd_addr));
index f6278933b7b98dfd865866c2c52affcc86cb603f..9cf05fd9a58b44426c20df78b849d6b733df24f1 100644 (file)
@@ -86,6 +86,10 @@ static long ceph_ioctl_set_layout(struct file *file, void __user *arg)
        return err;
 }
 
+/*
+ * Return object name, size/offset information, and location (OSD
+ * number, network address) for a given file offset.
+ */
 static long ceph_ioctl_get_dataloc(struct file *file, void __user *arg)
 {
        struct ceph_ioctl_dataloc dl;
@@ -94,7 +98,6 @@ static long ceph_ioctl_get_dataloc(struct file *file, void __user *arg)
        struct ceph_osd_client *osdc = &ceph_client(inode->i_sb)->osdc;
        u64 len = 1, olen;
        u64 tmp;
-       char oid[80];
        struct ceph_object_layout ol;
        union ceph_pg pgid;
 
@@ -113,8 +116,10 @@ static long ceph_ioctl_get_dataloc(struct file *file, void __user *arg)
        tmp = dl.object_offset;
        dl.block_offset = do_div(tmp, dl.block_size);
 
-       sprintf(oid, "%llx.%08llx", ceph_ino(inode), dl.object_no);
-       ceph_calc_object_layout(&ol, oid, &ci->i_layout, osdc->osdmap);
+       snprintf(dl.object_name, sizeof(dl.object_name), "%llx.%08llx",
+                ceph_ino(inode), dl.object_no);
+       ceph_calc_object_layout(&ol, dl.object_name, &ci->i_layout,
+                               osdc->osdmap);
 
        pgid.pg64 = le64_to_cpu(ol.ol_pgid);
        dl.osd = ceph_calc_pg_primary(osdc->osdmap, pgid);
index d954c6ae76b8486a4f00c3f1915716f74406f79e..86866707f611f0f30ce9ff742d93018c1f614fe7 100644 (file)
@@ -18,13 +18,15 @@ struct ceph_ioctl_layout {
                                   struct ceph_ioctl_layout)
 
 /*
- * Extract identity, address of the OSD storing a given file offset.
+ * Extract identity, address of the OSD and object storing a given
+ * file offset.
  */
 struct ceph_ioctl_dataloc {
        __u64 file_offset;           /* in+out: file offset */
        __u64 object_offset;         /* out: offset in object */
        __u64 object_no;             /* out: object # */
        __u64 object_size;           /* out: object size */
+       char object_name[64];        /* out: object name */
        __u64 block_offset;          /* out: offset in block */
        __u64 block_size;            /* out: block length */
        __s64 osd;                   /* out: osd # */