From 12909bb6071437922055c51973e8b268c5510214 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Tue, 4 Mar 2014 10:26:58 +0800 Subject: [PATCH] mds: check projected xattr when handling setxattr Fixes: #2288 Signed-off-by: Yan, Zheng --- src/mds/Server.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 43108524218f..5006708bc203 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; -- 2.47.3