]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/FileStore: use _fgetattrs() from _rmattrs()
authorSage Weil <sage@inktank.com>
Sat, 27 Oct 2012 22:10:56 +0000 (15:10 -0700)
committerSage Weil <sage@inktank.com>
Mon, 5 Nov 2012 08:13:52 +0000 (00:13 -0800)
Note that we subtly change failure handling to be more strict: if we
fail to open the file, we error out; before we ignored errors from
_getattr().

Signed-off-by: Sage Weil <sage@inktank.com>
src/os/FileStore.cc

index 084a34367631066ead79a19db40ace82670a13b6..333a6df630920247ac3d29b7627a5312286a6595 100644 (file)
@@ -4062,16 +4062,24 @@ int FileStore::_rmattrs(coll_t cid, const hobject_t& oid,
   dout(15) << "rmattrs " << cid << "/" << oid << dendl;
 
   map<string,bufferptr> aset;
-  int r = _getattrs(cid, oid, aset);
+  int r = 0;
+  int fd = lfn_open(cid, oid, 0);
+  if (fd < 0) {
+    r = -errno;
+    goto out;
+  }
+  r = _fgetattrs(fd, aset, false);
   if (r >= 0) {
     for (map<string,bufferptr>::iterator p = aset.begin(); p != aset.end(); p++) {
       char n[CHAIN_XATTR_MAX_NAME_LEN];
       get_attrname(p->first.c_str(), n, CHAIN_XATTR_MAX_NAME_LEN);
-      r = lfn_removexattr(cid, oid, n);
+      r = chain_fremovexattr(fd, n);
       if (r < 0)
        break;
     }
   }
+  TEMP_FAILURE_RETRY(::close(fd));
+
   if (g_conf->filestore_xattr_use_omap) {
     set<string> omap_attrs;
     Index index;
@@ -4092,6 +4100,7 @@ int FileStore::_rmattrs(coll_t cid, const hobject_t& oid,
       return r;
     }
   }
+ out:
   dout(10) << "rmattrs " << cid << "/" << oid << " = " << r << dendl;
   return r;
 }