From: Yan, Zheng Date: Tue, 4 Mar 2014 02:26:58 +0000 (+0800) Subject: mds: check projected xattr when handling setxattr X-Git-Tag: v0.78~96^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=12909bb6071437922055c51973e8b268c5510214;p=ceph.git mds: check projected xattr when handling setxattr Fixes: #2288 Signed-off-by: Yan, Zheng --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 43108524218f4..5006708bc2032 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -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 *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;