nfsd: notify_change needs elevated write count
Looks like this bug has been here since these write counts were introduced, not sure why it was just noticed now. Thanks also to Jan Kara for pointing out the problem. Cc: stable@vger.kernel.org Reported-by: Matthew Rahtz <mrahtz@rapitasystems.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
a11fcce154
commit
9f67f18993
|
@ -404,6 +404,7 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap,
|
||||||
umode_t ftype = 0;
|
umode_t ftype = 0;
|
||||||
__be32 err;
|
__be32 err;
|
||||||
int host_err;
|
int host_err;
|
||||||
|
bool get_write_count;
|
||||||
int size_change = 0;
|
int size_change = 0;
|
||||||
|
|
||||||
if (iap->ia_valid & (ATTR_ATIME | ATTR_MTIME | ATTR_SIZE))
|
if (iap->ia_valid & (ATTR_ATIME | ATTR_MTIME | ATTR_SIZE))
|
||||||
|
@ -411,10 +412,18 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap,
|
||||||
if (iap->ia_valid & ATTR_SIZE)
|
if (iap->ia_valid & ATTR_SIZE)
|
||||||
ftype = S_IFREG;
|
ftype = S_IFREG;
|
||||||
|
|
||||||
|
/* Callers that do fh_verify should do the fh_want_write: */
|
||||||
|
get_write_count = !fhp->fh_dentry;
|
||||||
|
|
||||||
/* Get inode */
|
/* Get inode */
|
||||||
err = fh_verify(rqstp, fhp, ftype, accmode);
|
err = fh_verify(rqstp, fhp, ftype, accmode);
|
||||||
if (err)
|
if (err)
|
||||||
goto out;
|
goto out;
|
||||||
|
if (get_write_count) {
|
||||||
|
host_err = fh_want_write(fhp);
|
||||||
|
if (host_err)
|
||||||
|
return nfserrno(host_err);
|
||||||
|
}
|
||||||
|
|
||||||
dentry = fhp->fh_dentry;
|
dentry = fhp->fh_dentry;
|
||||||
inode = dentry->d_inode;
|
inode = dentry->d_inode;
|
||||||
|
|
Loading…
Reference in New Issue