#define NFS_DEF_FILE_IO_SIZE (4096U)
#define NFS_MIN_FILE_IO_SIZE (1024U)
-struct nfs_fsid {
- uint64_t major;
- uint64_t minor;
+struct nfs4_fsid {
+ __u64 major;
+ __u64 minor;
};
-/*
- * Helper for checking equality between 2 fsids.
- */
-static inline int nfs_fsid_equal(const struct nfs_fsid *a, const struct nfs_fsid *b)
-{
- return a->major == b->major && a->minor == b->minor;
-}
-
struct nfs_fattr {
unsigned short valid; /* which fields are valid */
__u64 pre_size; /* pre_op_attr.size */
} nfs3;
} du;
dev_t rdev;
- struct nfs_fsid fsid;
+ union {
+ __u64 nfs3; /* also nfs2 */
+ struct nfs4_fsid nfs4;
+ } fsid_u;
__u64 fileid;
struct timespec atime;
struct timespec mtime;
#define NFS_ATTR_WCC 0x0001 /* pre-op WCC data */
#define NFS_ATTR_FATTR 0x0002 /* post-op attributes */
#define NFS_ATTR_FATTR_V3 0x0004 /* NFSv3 attributes */
-#define NFS_ATTR_FATTR_V4 0x0008 /* NFSv4 change attribute */
-#define NFS_ATTR_FATTR_V4_REFERRAL 0x0010 /* NFSv4 referral */
+#define NFS_ATTR_FATTR_V4 0x0008
+#define NFS_ATTR_PRE_CHANGE 0x0010
/*
* Info on the file system
struct nfs4_setclientid {
const nfs4_verifier * sc_verifier; /* request */
unsigned int sc_name_len;
- char sc_name[48]; /* request */
+ char sc_name[32]; /* request */
u32 sc_prog; /* request */
unsigned int sc_netid_len;
char sc_netid[4]; /* request */
u32 has_symlinks;
};
-struct nfs4_string {
- unsigned int len;
- char *data;
-};
-
-#define NFS4_PATHNAME_MAXCOMPONENTS 512
-struct nfs4_pathname {
- unsigned int ncomponents;
- struct nfs4_string components[NFS4_PATHNAME_MAXCOMPONENTS];
-};
-
-#define NFS4_FS_LOCATION_MAXSERVERS 10
-struct nfs4_fs_location {
- unsigned int nservers;
- struct nfs4_string servers[NFS4_FS_LOCATION_MAXSERVERS];
- struct nfs4_pathname rootpath;
-};
-
-#define NFS4_FS_LOCATIONS_MAXENTRIES 10
-struct nfs4_fs_locations {
- struct nfs_fattr fattr;
- const struct nfs_server *server;
- struct nfs4_pathname fs_path;
- int nlocations;
- struct nfs4_fs_location locations[NFS4_FS_LOCATIONS_MAXENTRIES];
-};
-
-struct nfs4_fs_locations_arg {
- const struct nfs_fh *dir_fh;
- const struct qstr *name;
- struct page *page;
- const u32 *bitmask;
-};
-
#endif /* CONFIG_NFS_V4 */
struct nfs_page;
struct list_head pages; /* Coalesced read requests */
struct nfs_page *req; /* multi ops per nfs_page */
struct page **pagevec;
- unsigned int npages; /* Max length of pagevec */
struct nfs_readargs args;
struct nfs_readres res;
#ifdef CONFIG_NFS_V4
unsigned long timestamp; /* For lease renewal */
#endif
- struct page *page_array[NFS_PAGEVEC_SIZE];
+ void (*complete) (struct nfs_read_data *, int);
+ struct page *page_array[NFS_PAGEVEC_SIZE + 1];
};
struct nfs_write_data {
struct list_head pages; /* Coalesced requests we wish to flush */
struct nfs_page *req; /* multi ops per nfs_page */
struct page **pagevec;
- unsigned int npages; /* Max length of pagevec */
struct nfs_writeargs args; /* argument struct */
struct nfs_writeres res; /* result struct */
#ifdef CONFIG_NFS_V4
unsigned long timestamp; /* For lease renewal */
#endif
- struct page *page_array[NFS_PAGEVEC_SIZE];
+ void (*complete) (struct nfs_write_data *, int);
+ struct page *page_array[NFS_PAGEVEC_SIZE + 1];
};
struct nfs_access_entry;
int (*getroot) (struct nfs_server *, struct nfs_fh *,
struct nfs_fsinfo *);
- int (*lookupfh)(struct nfs_server *, struct nfs_fh *,
- struct qstr *, struct nfs_fh *,
- struct nfs_fattr *);
int (*getattr) (struct nfs_server *, struct nfs_fh *,
struct nfs_fattr *);
int (*setattr) (struct dentry *, struct nfs_fattr *,
struct nfs_fsinfo *);
int (*pathconf) (struct nfs_server *, struct nfs_fh *,
struct nfs_pathconf *);
- int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
u32 * (*decode_dirent)(u32 *, struct nfs_entry *, int plus);
void (*read_setup) (struct nfs_read_data *);
- int (*read_done) (struct rpc_task *, struct nfs_read_data *);
void (*write_setup) (struct nfs_write_data *, int how);
- int (*write_done) (struct rpc_task *, struct nfs_write_data *);
void (*commit_setup) (struct nfs_write_data *, int how);
- int (*commit_done) (struct rpc_task *, struct nfs_write_data *);
int (*file_open) (struct inode *, struct file *);
int (*file_release) (struct inode *, struct file *);
int (*lock)(struct file *, int, struct file_lock *);
/*
* Function vectors etc. for the NFS client
*/
-extern const struct nfs_rpc_ops nfs_v2_clientops;
-extern const struct nfs_rpc_ops nfs_v3_clientops;
-extern const struct nfs_rpc_ops nfs_v4_clientops;
+extern struct nfs_rpc_ops nfs_v2_clientops;
+extern struct nfs_rpc_ops nfs_v3_clientops;
+extern struct nfs_rpc_ops nfs_v4_clientops;
extern struct rpc_version nfs_version2;
extern struct rpc_version nfs_version3;
extern struct rpc_version nfs_version4;