mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
nfsd: don't provide pre/post-op attrs if fh_getattr fails
nfsd calls fh_getattr to get the latest inode attrs for pre/post-op info. In the event that fh_getattr fails, it resorts to scraping cached values out of the inode directly. Since these attributes are optional, we can just skip providing them altogether when this happens. Signed-off-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Reviewed-by: Neil Brown <neilb@suse.de>
This commit is contained in:
parent
df56b384de
commit
518f375c15
1 changed files with 7 additions and 19 deletions
|
@ -623,16 +623,9 @@ void fh_fill_pre_attrs(struct svc_fh *fhp)
|
|||
|
||||
inode = d_inode(fhp->fh_dentry);
|
||||
err = fh_getattr(fhp, &stat);
|
||||
if (err) {
|
||||
/* Grab the times from inode anyway */
|
||||
stat.mtime = inode->i_mtime;
|
||||
stat.ctime = inode->i_ctime;
|
||||
stat.size = inode->i_size;
|
||||
if (v4 && IS_I_VERSION(inode)) {
|
||||
stat.change_cookie = inode_query_iversion(inode);
|
||||
stat.result_mask |= STATX_CHANGE_COOKIE;
|
||||
}
|
||||
}
|
||||
if (err)
|
||||
return;
|
||||
|
||||
if (v4)
|
||||
fhp->fh_pre_change = nfsd4_change_attribute(&stat, inode);
|
||||
|
||||
|
@ -660,15 +653,10 @@ void fh_fill_post_attrs(struct svc_fh *fhp)
|
|||
printk("nfsd: inode locked twice during operation.\n");
|
||||
|
||||
err = fh_getattr(fhp, &fhp->fh_post_attr);
|
||||
if (err) {
|
||||
fhp->fh_post_saved = false;
|
||||
fhp->fh_post_attr.ctime = inode->i_ctime;
|
||||
if (v4 && IS_I_VERSION(inode)) {
|
||||
fhp->fh_post_attr.change_cookie = inode_query_iversion(inode);
|
||||
fhp->fh_post_attr.result_mask |= STATX_CHANGE_COOKIE;
|
||||
}
|
||||
} else
|
||||
fhp->fh_post_saved = true;
|
||||
if (err)
|
||||
return;
|
||||
|
||||
fhp->fh_post_saved = true;
|
||||
if (v4)
|
||||
fhp->fh_post_change =
|
||||
nfsd4_change_attribute(&fhp->fh_post_attr, inode);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue