Skip to content

Commit ef5825e

Browse files
neilbrownJ. Bruce Fields
authored andcommitted
NFSD: move filehandle format declarations out of "uapi".
A small part of the declaration concerning filehandle format are currently in the "uapi" include directory: include/uapi/linux/nfsd/nfsfh.h There is a lot more to the filehandle format, including "enum fid_type" and "enum nfsd_fsid" which are not exported via "uapi". This small part of the filehandle definition is of minimal use outside of the kernel, and I can find no evidence that an other code is using it. Certainly nfs-utils and wireshark (The most likely candidates) do not use these declarations. So move it out of "uapi" by copying the content from include/uapi/linux/nfsd/nfsfh.h into fs/nfsd/nfsfh.h A few unnecessary "#include" directives are not copied, and neither is the #define of fh_auth, which is annotated as being for userspace only. The copyright claims in the uapi file are identical to those in the nfsd file, so there is no need to copy those. The "__u32" style integer types are only needed in "uapi". In kernel-only code we can use the more familiar "u32" style. Signed-off-by: NeilBrown <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
1 parent 458032f commit ef5825e

File tree

3 files changed

+97
-116
lines changed

3 files changed

+97
-116
lines changed

fs/nfsd/nfsfh.h

Lines changed: 96 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,104 @@
1010

1111
#include <linux/crc32.h>
1212
#include <linux/sunrpc/svc.h>
13-
#include <uapi/linux/nfsd/nfsfh.h>
1413
#include <linux/iversion.h>
1514
#include <linux/exportfs.h>
15+
#include <linux/nfs4.h>
16+
17+
18+
/*
19+
* This is the old "dentry style" Linux NFSv2 file handle.
20+
*
21+
* The xino and xdev fields are currently used to transport the
22+
* ino/dev of the exported inode.
23+
*/
24+
struct nfs_fhbase_old {
25+
u32 fb_dcookie; /* dentry cookie - always 0xfeebbaca */
26+
u32 fb_ino; /* our inode number */
27+
u32 fb_dirino; /* dir inode number, 0 for directories */
28+
u32 fb_dev; /* our device */
29+
u32 fb_xdev;
30+
u32 fb_xino;
31+
u32 fb_generation;
32+
};
33+
34+
/*
35+
* This is the new flexible, extensible style NFSv2/v3/v4 file handle.
36+
*
37+
* The file handle starts with a sequence of four-byte words.
38+
* The first word contains a version number (1) and three descriptor bytes
39+
* that tell how the remaining 3 variable length fields should be handled.
40+
* These three bytes are auth_type, fsid_type and fileid_type.
41+
*
42+
* All four-byte values are in host-byte-order.
43+
*
44+
* The auth_type field is deprecated and must be set to 0.
45+
*
46+
* The fsid_type identifies how the filesystem (or export point) is
47+
* encoded.
48+
* Current values:
49+
* 0 - 4 byte device id (ms-2-bytes major, ls-2-bytes minor), 4byte inode number
50+
* NOTE: we cannot use the kdev_t device id value, because kdev_t.h
51+
* says we mustn't. We must break it up and reassemble.
52+
* 1 - 4 byte user specified identifier
53+
* 2 - 4 byte major, 4 byte minor, 4 byte inode number - DEPRECATED
54+
* 3 - 4 byte device id, encoded for user-space, 4 byte inode number
55+
* 4 - 4 byte inode number and 4 byte uuid
56+
* 5 - 8 byte uuid
57+
* 6 - 16 byte uuid
58+
* 7 - 8 byte inode number and 16 byte uuid
59+
*
60+
* The fileid_type identified how the file within the filesystem is encoded.
61+
* The values for this field are filesystem specific, exccept that
62+
* filesystems must not use the values '0' or '0xff'. 'See enum fid_type'
63+
* in include/linux/exportfs.h for currently registered values.
64+
*/
65+
struct nfs_fhbase_new {
66+
union {
67+
struct {
68+
u8 fb_version_aux; /* == 1, even => nfs_fhbase_old */
69+
u8 fb_auth_type_aux;
70+
u8 fb_fsid_type_aux;
71+
u8 fb_fileid_type_aux;
72+
u32 fb_auth[1];
73+
/* u32 fb_fsid[0]; floating */
74+
/* u32 fb_fileid[0]; floating */
75+
};
76+
struct {
77+
u8 fb_version; /* == 1, even => nfs_fhbase_old */
78+
u8 fb_auth_type;
79+
u8 fb_fsid_type;
80+
u8 fb_fileid_type;
81+
u32 fb_auth_flex[]; /* flexible-array member */
82+
};
83+
};
84+
};
85+
86+
struct knfsd_fh {
87+
unsigned int fh_size; /* significant for NFSv3.
88+
* Points to the current size while building
89+
* a new file handle
90+
*/
91+
union {
92+
struct nfs_fhbase_old fh_old;
93+
u32 fh_pad[NFS4_FHSIZE/4];
94+
struct nfs_fhbase_new fh_new;
95+
} fh_base;
96+
};
97+
98+
#define ofh_dcookie fh_base.fh_old.fb_dcookie
99+
#define ofh_ino fh_base.fh_old.fb_ino
100+
#define ofh_dirino fh_base.fh_old.fb_dirino
101+
#define ofh_dev fh_base.fh_old.fb_dev
102+
#define ofh_xdev fh_base.fh_old.fb_xdev
103+
#define ofh_xino fh_base.fh_old.fb_xino
104+
#define ofh_generation fh_base.fh_old.fb_generation
105+
106+
#define fh_version fh_base.fh_new.fb_version
107+
#define fh_fsid_type fh_base.fh_new.fb_fsid_type
108+
#define fh_auth_type fh_base.fh_new.fb_auth_type
109+
#define fh_fileid_type fh_base.fh_new.fb_fileid_type
110+
#define fh_fsid fh_base.fh_new.fb_auth_flex
16111

17112
static inline __u32 ino_t_to_u32(ino_t ino)
18113
{

fs/nfsd/vfs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ nfsd_lookup_dentry(struct svc_rqst *rqstp, struct svc_fh *fhp,
244244
* returned. Otherwise the covered directory is returned.
245245
* NOTE: this mountpoint crossing is not supported properly by all
246246
* clients and is explicitly disallowed for NFSv3
247+
* NeilBrown <[email protected]>
247248
*/
248249
__be32
249250
nfsd_lookup(struct svc_rqst *rqstp, struct svc_fh *fhp, const char *name,

include/uapi/linux/nfsd/nfsfh.h

Lines changed: 0 additions & 115 deletions
This file was deleted.

0 commit comments

Comments
 (0)