From: huanwen ren Date: Wed, 21 Dec 2016 01:26:43 +0000 (+0000) Subject: client: priority to verify the correctness of the "flag" X-Git-Tag: v12.0.1~306^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7771adf9fca9847af6603226de74946abc47165a;p=ceph.git client: priority to verify the correctness of the "flag" Signed-off-by: huanwen ren --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 5de2b22cbbc..27135705e1a 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -7994,17 +7994,17 @@ void Client::_put_fh(Fh *f) int Client::_open(Inode *in, int flags, mode_t mode, Fh **fhp, const UserPerm& perms) { + if (in->snapid != CEPH_NOSNAP && + (flags & (O_WRONLY | O_RDWR | O_CREAT | O_TRUNC | O_APPEND))) { + return -EROFS; + } + int cmode = ceph_flags_to_mode(flags); if (cmode < 0) return -EINVAL; int want = ceph_caps_for_mode(cmode); int result = 0; - if (in->snapid != CEPH_NOSNAP && - (flags & (O_WRONLY | O_RDWR | O_CREAT | O_TRUNC | O_APPEND))) { - return -EROFS; - } - in->get_open_ref(cmode); // make note of pending open, since it effects _wanted_ caps. if ((flags & O_TRUNC) == 0 &&