client: priority to verify the correctness of the "flag"

Signed-off-by: huanwen ren <ren.huanwen@zte.com.cn>
This commit is contained in:
huanwen ren 2016-12-21 01:26:43 +00:00
parent 701d9e1e63
commit 7771adf9fc

View File

@ -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 &&