]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbdtool: rename should first check source
authorYehuda Sadeh <yehuda@hq.newdream.net>
Fri, 9 Jul 2010 22:50:58 +0000 (15:50 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Fri, 9 Jul 2010 23:24:18 +0000 (16:24 -0700)
that is, source image doesn't exist error should have priority
over destination already exists.

src/rbdtool.cc

index 11eaa50c5ca7dfc4d15fdd8cf05c542479c2508b..0349946ac8a84d38c543cb8ee63a8cee7084e3cf 100644 (file)
@@ -362,17 +362,17 @@ static int do_rename(pools_t& pp, string& md_oid, const char *imgname, const cha
   dst_md_oid += RBD_SUFFIX;
   string dstname_str = dstname;
   string imgname_str = imgname;
-  int r = rados.stat(pp.md, dst_md_oid, NULL, NULL);
-  if (r == 0) {
-    cerr << "rbd image header " << dst_md_oid << " already exists" << std::endl;
-    return -EEXIST;
-  }
   bufferlist header;
-  r = read_header_bl(pp.md, md_oid, header);
+  int r = read_header_bl(pp.md, md_oid, header);
   if (r < 0) {
     cerr << "error reading header: " << md_oid << ": " << strerror(-r) << std::endl;
     return r;
   }
+  r = rados.stat(pp.md, dst_md_oid, NULL, NULL);
+  if (r == 0) {
+    cerr << "rbd image header " << dst_md_oid << " already exists" << std::endl;
+    return -EEXIST;
+  }
   r = write_header(pp, dst_md_oid, header);
   if (r < 0) {
     cerr << "error writing header: " << dst_md_oid << ": " << strerror(-r) << std::endl;