diff options
Diffstat (limited to 'fs/exportfs')
| -rw-r--r-- | fs/exportfs/expfs.c | 9 | 
1 files changed, 7 insertions, 2 deletions
| diff --git a/fs/exportfs/expfs.c b/fs/exportfs/expfs.c index 07ea3d62b298..4f2dd4ab4486 100644 --- a/fs/exportfs/expfs.c +++ b/fs/exportfs/expfs.c @@ -427,7 +427,7 @@ EXPORT_SYMBOL_GPL(exportfs_encode_fh);  struct dentry *  exportfs_decode_fh_raw(struct vfsmount *mnt, struct fid *fid, int fh_len, -		       int fileid_type, +		       int fileid_type, unsigned int flags,  		       int (*acceptable)(void *, struct dentry *),  		       void *context)  { @@ -445,6 +445,11 @@ exportfs_decode_fh_raw(struct vfsmount *mnt, struct fid *fid, int fh_len,  	if (IS_ERR_OR_NULL(result))  		return result; +	if ((flags & EXPORT_FH_DIR_ONLY) && !d_is_dir(result)) { +		err = -ENOTDIR; +		goto err_result; +	} +  	/*  	 * If no acceptance criteria was specified by caller, a disconnected  	 * dentry is also accepatable. Callers may use this mode to query if @@ -581,7 +586,7 @@ struct dentry *exportfs_decode_fh(struct vfsmount *mnt, struct fid *fid,  {  	struct dentry *ret; -	ret = exportfs_decode_fh_raw(mnt, fid, fh_len, fileid_type, +	ret = exportfs_decode_fh_raw(mnt, fid, fh_len, fileid_type, 0,  				     acceptable, context);  	if (IS_ERR_OR_NULL(ret)) {  		if (ret == ERR_PTR(-ENOMEM)) |