forked from luck/tmp_suning_uos_patched
nfsd4: helper function for getting mounted_on ino
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
3c40794b2d
commit
ae7095a7c4
|
@ -2014,6 +2014,22 @@ static __be32 fattr_handle_absent_fs(u32 *bmval0, u32 *bmval1, u32 *rdattr_err)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int get_parent_attributes(struct svc_export *exp, struct kstat *stat)
|
||||
{
|
||||
struct path path = exp->ex_path;
|
||||
int err;
|
||||
|
||||
path_get(&path);
|
||||
while (follow_up(&path)) {
|
||||
if (path.dentry != path.mnt->mnt_root)
|
||||
break;
|
||||
}
|
||||
err = vfs_getattr(path.mnt, path.dentry, stat);
|
||||
path_put(&path);
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
* Note: @fhp can be NULL; in this case, we might have to compose the filehandle
|
||||
* ourselves.
|
||||
|
@ -2430,18 +2446,8 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
|
|||
* and this is the root of a cross-mounted filesystem.
|
||||
*/
|
||||
if (ignore_crossmnt == 0 &&
|
||||
dentry == exp->ex_path.mnt->mnt_root) {
|
||||
struct path path = exp->ex_path;
|
||||
path_get(&path);
|
||||
while (follow_up(&path)) {
|
||||
if (path.dentry != path.mnt->mnt_root)
|
||||
break;
|
||||
}
|
||||
err = vfs_getattr(path.mnt, path.dentry, &stat);
|
||||
path_put(&path);
|
||||
if (err)
|
||||
goto out_nfserr;
|
||||
}
|
||||
dentry == exp->ex_path.mnt->mnt_root)
|
||||
get_parent_attributes(exp, &stat);
|
||||
WRITE64(stat.ino);
|
||||
}
|
||||
if (bmval2 & FATTR4_WORD2_SUPPATTR_EXCLCREAT) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user