|
@@ -89,6 +89,12 @@ struct raparm_hbucket {
|
|
#define RAPARM_HASH_MASK (RAPARM_HASH_SIZE-1)
|
|
#define RAPARM_HASH_MASK (RAPARM_HASH_SIZE-1)
|
|
static struct raparm_hbucket raparm_hash[RAPARM_HASH_SIZE];
|
|
static struct raparm_hbucket raparm_hash[RAPARM_HASH_SIZE];
|
|
|
|
|
|
|
|
+static inline int
|
|
|
|
+nfsd_v4client(struct svc_rqst *rq)
|
|
|
|
+{
|
|
|
|
+ return rq->rq_prog == NFS_PROGRAM && rq->rq_vers == 4;
|
|
|
|
+}
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Called from nfsd_lookup and encode_dirent. Check if we have crossed
|
|
* Called from nfsd_lookup and encode_dirent. Check if we have crossed
|
|
* a mount point.
|
|
* a mount point.
|
|
@@ -115,7 +121,8 @@ nfsd_cross_mnt(struct svc_rqst *rqstp, struct dentry **dpp,
|
|
path_put(&path);
|
|
path_put(&path);
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
- if ((exp->ex_flags & NFSEXP_CROSSMOUNT) || EX_NOHIDE(exp2)) {
|
|
|
|
|
|
+ if (nfsd_v4client(rqstp) ||
|
|
|
|
+ (exp->ex_flags & NFSEXP_CROSSMOUNT) || EX_NOHIDE(exp2)) {
|
|
/* successfully crossed mount point */
|
|
/* successfully crossed mount point */
|
|
/*
|
|
/*
|
|
* This is subtle: path.dentry is *not* on path.mnt
|
|
* This is subtle: path.dentry is *not* on path.mnt
|