]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Client: get describe_layout by file handle/path
authorAndras Elso <elso.andras@gmail.com>
Mon, 6 May 2013 23:20:37 +0000 (01:20 +0200)
committerAndras Elso <elso.andras@gmail.com>
Fri, 17 May 2013 19:10:54 +0000 (21:10 +0200)
Signed-off-by: Andras Elso <elso.andras@gmail.com>
src/client/Client.cc
src/client/Client.h
src/client/SyntheticClient.cc
src/libcephfs.cc

index bed2c450f2f01dc2506a27ce6235661f5ab74154..a2275c5342d2f7001ba6543ecd0261703f108dd7 100644 (file)
@@ -7654,7 +7654,23 @@ int Client::ll_release(Fh *fh)
 
 // expose file layouts
 
-int Client::describe_layout(int fd, ceph_file_layout *lp)
+int Client::describe_layout(const char *relpath, ceph_file_layout *lp)
+{
+  Mutex::Locker lock(client_lock);
+
+  filepath path(relpath);
+  Inode *in;
+  int r = path_walk(path, &in);
+  if (r < 0)
+    return r;
+
+  *lp = in->layout;
+
+  ldout(cct, 3) << "describe_layout(" << relpath << ") = 0" << dendl;
+  return 0;
+}
+
+int Client::fdescribe_layout(int fd, ceph_file_layout *lp)
 {
   Mutex::Locker lock(client_lock);
 
@@ -7665,7 +7681,7 @@ int Client::describe_layout(int fd, ceph_file_layout *lp)
 
   *lp = in->layout;
 
-  ldout(cct, 3) << "describe_layout(" << fd << ") = 0" << dendl;
+  ldout(cct, 3) << "fdescribe_layout(" << fd << ") = 0" << dendl;
   return 0;
 }
 
index 29a5020c6a63bb1bef5b62c5467970984275ee33..b0bc6e0e1e4ce79f54b9a34be406cfad03568014 100644 (file)
@@ -670,7 +670,8 @@ public:
   int lazyio_synchronize(int fd, loff_t offset, size_t count);
 
   // expose file layout
-  int describe_layout(int fd, ceph_file_layout* layout);
+  int describe_layout(const char *path, ceph_file_layout* layout);
+  int fdescribe_layout(int fd, ceph_file_layout* layout);
   int get_file_stripe_address(int fd, loff_t offset, vector<entity_addr_t>& address);
   int get_file_extent_osds(int fd, loff_t off, loff_t *len, vector<int>& osds);
   int get_osd_addr(int osd, entity_addr_t& addr);
index fd2c6e57c3fe048e169ed029f13c5f6c08304394..79171da46f1d2fee4dc36049f3ac8b8cc5e9dd2e 100644 (file)
@@ -3402,7 +3402,7 @@ int SyntheticClient::chunk_file(string &filename)
   inode_t inode;
   memset(&inode, 0, sizeof(inode));
   inode.ino = st.st_ino;
-  ret = client->describe_layout(fd, &inode.layout);
+  ret = client->fdescribe_layout(fd, &inode.layout);
   if (ret < 0)
     return ret;
 
index 9d68715e7816ff510eec0d2ba608a724ba5ccbb4..d0997c8f4cce99b9bbfdc9194fd3b187af54bcf0 100644 (file)
@@ -722,7 +722,7 @@ extern "C" int ceph_get_file_stripe_unit(struct ceph_mount_info *cmount, int fh)
 
   if (!cmount->is_mounted())
     return -ENOTCONN;
-  r = cmount->get_client()->describe_layout(fh, &l);
+  r = cmount->get_client()->fdescribe_layout(fh, &l);
   if (r < 0)
     return r;
   return l.fl_stripe_unit;
@@ -735,7 +735,7 @@ extern "C" int ceph_get_file_pool(struct ceph_mount_info *cmount, int fh)
 
   if (!cmount->is_mounted())
     return -ENOTCONN;
-  r = cmount->get_client()->describe_layout(fh, &l);
+  r = cmount->get_client()->fdescribe_layout(fh, &l);
   if (r < 0)
     return r;
   return l.fl_pg_pool;
@@ -748,7 +748,7 @@ extern "C" int ceph_get_file_pool_name(struct ceph_mount_info *cmount, int fh, c
 
   if (!cmount->is_mounted())
     return -ENOTCONN;
-  r = cmount->get_client()->describe_layout(fh, &l);
+  r = cmount->get_client()->fdescribe_layout(fh, &l);
   if (r < 0)
     return r;
   string name = cmount->get_client()->get_pool_name(l.fl_pg_pool);
@@ -767,7 +767,7 @@ extern "C" int ceph_get_file_replication(struct ceph_mount_info *cmount, int fh)
 
   if (!cmount->is_mounted())
     return -ENOTCONN;
-  r = cmount->get_client()->describe_layout(fh, &l);
+  r = cmount->get_client()->fdescribe_layout(fh, &l);
   if (r < 0)
     return r;
   int rep = cmount->get_client()->get_pool_replication(l.fl_pg_pool);