]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: check projected xattr when handling setxattr 1358/head
authorYan, Zheng <zheng.z.yan@intel.com>
Tue, 4 Mar 2014 02:26:58 +0000 (10:26 +0800)
committerYan, Zheng <zheng.z.yan@intel.com>
Tue, 4 Mar 2014 02:55:23 +0000 (10:55 +0800)
Fixes: #2288
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
src/mds/Server.cc

index 43108524218f4acda5d2c0cfcf756ef671579d89..5006708bc203246a3c33ca263ce03ea86c459e8e 100644 (file)
@@ -3785,12 +3785,13 @@ void Server::handle_client_setxattr(MDRequest *mdr)
   if (!mds->locker->acquire_locks(mdr, rdlocks, wrlocks, xlocks))
     return;
 
-  if ((flags & CEPH_XATTR_CREATE) && cur->xattrs.count(name)) {
+  map<string, bufferptr> *pxattrs = cur->get_projected_xattrs();
+  if ((flags & CEPH_XATTR_CREATE) && pxattrs->count(name)) {
     dout(10) << "setxattr '" << name << "' XATTR_CREATE and EEXIST on " << *cur << dendl;
     reply_request(mdr, -EEXIST);
     return;
   }
-  if ((flags & CEPH_XATTR_REPLACE) && !cur->xattrs.count(name)) {
+  if ((flags & CEPH_XATTR_REPLACE) && !pxattrs->count(name)) {
     dout(10) << "setxattr '" << name << "' XATTR_REPLACE and ENODATA on " << *cur << dendl;
     reply_request(mdr, -ENODATA);
     return;