mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
NFSD: Access a knfsd_fh's fsid by pointer
I'm about to remove the union in struct knfsd_fh. First step is to add an accessor function for the file handle's fsid portion. Reviewed-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
parent
e58691ea4c
commit
edf7b905bc
3 changed files with 20 additions and 11 deletions
|
@ -65,7 +65,7 @@ nfsd4_alloc_devid_map(const struct svc_fh *fhp)
|
|||
return;
|
||||
|
||||
map->fsid_type = fh->fh_fsid_type;
|
||||
memcpy(&map->fsid, fh->fh_fsid, fsid_len);
|
||||
memcpy(&map->fsid, fh_fsid(fh), fsid_len);
|
||||
|
||||
spin_lock(&nfsd_devid_lock);
|
||||
if (fhp->fh_export->ex_devid_map)
|
||||
|
@ -75,7 +75,7 @@ nfsd4_alloc_devid_map(const struct svc_fh *fhp)
|
|||
list_for_each_entry(old, &nfsd_devid_hash[i], hash) {
|
||||
if (old->fsid_type != fh->fh_fsid_type)
|
||||
continue;
|
||||
if (memcmp(old->fsid, fh->fh_fsid,
|
||||
if (memcmp(old->fsid, fh_fsid(fh),
|
||||
key_len(old->fsid_type)))
|
||||
continue;
|
||||
|
||||
|
|
|
@ -172,6 +172,8 @@ static __be32 nfsd_set_fh_dentry(struct svc_rqst *rqstp, struct net *net,
|
|||
if (len == 0)
|
||||
return error;
|
||||
if (fh->fh_fsid_type == FSID_MAJOR_MINOR) {
|
||||
u32 *fsid = fh_fsid(fh);
|
||||
|
||||
/* deprecated, convert to type 3 */
|
||||
len = key_len(FSID_ENCODE_DEV)/4;
|
||||
fh->fh_fsid_type = FSID_ENCODE_DEV;
|
||||
|
@ -181,17 +183,17 @@ static __be32 nfsd_set_fh_dentry(struct svc_rqst *rqstp, struct net *net,
|
|||
* confuses sparse, so we must use __force here to
|
||||
* keep it from complaining.
|
||||
*/
|
||||
fh->fh_fsid[0] = new_encode_dev(MKDEV(ntohl((__force __be32)fh->fh_fsid[0]),
|
||||
ntohl((__force __be32)fh->fh_fsid[1])));
|
||||
fh->fh_fsid[1] = fh->fh_fsid[2];
|
||||
fsid[0] = new_encode_dev(MKDEV(ntohl((__force __be32)fsid[0]),
|
||||
ntohl((__force __be32)fsid[1])));
|
||||
fsid[1] = fsid[2];
|
||||
}
|
||||
data_left -= len;
|
||||
if (data_left < 0)
|
||||
return error;
|
||||
exp = rqst_exp_find(rqstp ? &rqstp->rq_chandle : NULL,
|
||||
net, client, gssclient,
|
||||
fh->fh_fsid_type, fh->fh_fsid);
|
||||
fid = (struct fid *)(fh->fh_fsid + len);
|
||||
fh->fh_fsid_type, fh_fsid(fh));
|
||||
fid = (struct fid *)(fh_fsid(fh) + len);
|
||||
|
||||
error = nfserr_stale;
|
||||
if (IS_ERR(exp)) {
|
||||
|
@ -463,7 +465,7 @@ static void _fh_update(struct svc_fh *fhp, struct svc_export *exp,
|
|||
{
|
||||
if (dentry != exp->ex_path.dentry) {
|
||||
struct fid *fid = (struct fid *)
|
||||
(fhp->fh_handle.fh_fsid + fhp->fh_handle.fh_size/4 - 1);
|
||||
(fh_fsid(&fhp->fh_handle) + fhp->fh_handle.fh_size/4 - 1);
|
||||
int maxsize = (fhp->fh_maxsize - fhp->fh_handle.fh_size)/4;
|
||||
int fh_flags = (exp->ex_flags & NFSEXP_NOSUBTREECHECK) ? 0 :
|
||||
EXPORT_FH_CONNECTABLE;
|
||||
|
@ -614,7 +616,7 @@ fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry,
|
|||
fhp->fh_handle.fh_auth_type = 0;
|
||||
|
||||
mk_fsid(fhp->fh_handle.fh_fsid_type,
|
||||
fhp->fh_handle.fh_fsid,
|
||||
fh_fsid(&fhp->fh_handle),
|
||||
ex_dev,
|
||||
d_inode(exp->ex_path.dentry)->i_ino,
|
||||
exp->ex_fsid, exp->ex_uuid);
|
||||
|
|
|
@ -56,11 +56,15 @@ struct knfsd_fh {
|
|||
u8 fh_auth_type; /* deprecated */
|
||||
u8 fh_fsid_type;
|
||||
u8 fh_fileid_type;
|
||||
u32 fh_fsid[NFS4_FHSIZE / 4 - 1];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
static inline u32 *fh_fsid(const struct knfsd_fh *fh)
|
||||
{
|
||||
return (u32 *)&fh->fh_raw[4];
|
||||
}
|
||||
|
||||
static inline __u32 ino_t_to_u32(ino_t ino)
|
||||
{
|
||||
return (__u32) ino;
|
||||
|
@ -260,9 +264,12 @@ static inline bool fh_match(const struct knfsd_fh *fh1,
|
|||
static inline bool fh_fsid_match(const struct knfsd_fh *fh1,
|
||||
const struct knfsd_fh *fh2)
|
||||
{
|
||||
u32 *fsid1 = fh_fsid(fh1);
|
||||
u32 *fsid2 = fh_fsid(fh2);
|
||||
|
||||
if (fh1->fh_fsid_type != fh2->fh_fsid_type)
|
||||
return false;
|
||||
if (memcmp(fh1->fh_fsid, fh2->fh_fsid, key_len(fh1->fh_fsid_type)) != 0)
|
||||
if (memcmp(fsid1, fsid2, key_len(fh1->fh_fsid_type)) != 0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue