mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-23 21:19:04 -04:00
Merge branch 'nfs-for-2.6.37' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6
* 'nfs-for-2.6.37' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6: net/sunrpc: Use static const char arrays nfs4: fix channel attribute sanity-checks NFSv4.1: Use more sensible names for 'initialize_mountpoint' NFSv4.1: pnfs: filelayout: add driver's LAYOUTGET and GETDEVICEINFO infrastructure NFSv4.1: pnfs: add LAYOUTGET and GETDEVICEINFO infrastructure NFS: client needs to maintain list of inodes with active layouts NFS: create and destroy inode's layout cache NFSv4.1: pnfs: filelayout: introduce minimal file layout driver NFSv4.1: pnfs: full mount/umount infrastructure NFS: set layout driver NFS: ask for layouttypes during v4 fsinfo call NFS: change stateid to be a union NFSv4.1: pnfsd, pnfs: protocol level pnfs constants SUNRPC: define xdr_decode_opaque_fixed NFSD: remove duplicate NFS4_STATEID_SIZE
This commit is contained in:
commit
a4dd8dce14
24 changed files with 2550 additions and 45 deletions
|
|
@ -17,7 +17,9 @@
|
|||
|
||||
#define NFS4_BITMAP_SIZE 2
|
||||
#define NFS4_VERIFIER_SIZE 8
|
||||
#define NFS4_STATEID_SIZE 16
|
||||
#define NFS4_STATEID_SEQID_SIZE 4
|
||||
#define NFS4_STATEID_OTHER_SIZE 12
|
||||
#define NFS4_STATEID_SIZE (NFS4_STATEID_SEQID_SIZE + NFS4_STATEID_OTHER_SIZE)
|
||||
#define NFS4_FHSIZE 128
|
||||
#define NFS4_MAXPATHLEN PATH_MAX
|
||||
#define NFS4_MAXNAMLEN NAME_MAX
|
||||
|
|
@ -167,7 +169,16 @@ struct nfs4_acl {
|
|||
};
|
||||
|
||||
typedef struct { char data[NFS4_VERIFIER_SIZE]; } nfs4_verifier;
|
||||
typedef struct { char data[NFS4_STATEID_SIZE]; } nfs4_stateid;
|
||||
|
||||
struct nfs41_stateid {
|
||||
__be32 seqid;
|
||||
char other[NFS4_STATEID_OTHER_SIZE];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
typedef union {
|
||||
char data[NFS4_STATEID_SIZE];
|
||||
struct nfs41_stateid stateid;
|
||||
} nfs4_stateid;
|
||||
|
||||
enum nfs_opnum4 {
|
||||
OP_ACCESS = 3,
|
||||
|
|
@ -471,6 +482,8 @@ enum lock_type4 {
|
|||
#define FATTR4_WORD1_TIME_MODIFY (1UL << 21)
|
||||
#define FATTR4_WORD1_TIME_MODIFY_SET (1UL << 22)
|
||||
#define FATTR4_WORD1_MOUNTED_ON_FILEID (1UL << 23)
|
||||
#define FATTR4_WORD1_FS_LAYOUT_TYPES (1UL << 30)
|
||||
#define FATTR4_WORD2_LAYOUT_BLKSIZE (1UL << 1)
|
||||
|
||||
#define NFSPROC4_NULL 0
|
||||
#define NFSPROC4_COMPOUND 1
|
||||
|
|
@ -532,6 +545,8 @@ enum {
|
|||
NFSPROC4_CLNT_SEQUENCE,
|
||||
NFSPROC4_CLNT_GET_LEASE_TIME,
|
||||
NFSPROC4_CLNT_RECLAIM_COMPLETE,
|
||||
NFSPROC4_CLNT_LAYOUTGET,
|
||||
NFSPROC4_CLNT_GETDEVICEINFO,
|
||||
};
|
||||
|
||||
/* nfs41 types */
|
||||
|
|
@ -550,6 +565,49 @@ enum state_protect_how4 {
|
|||
SP4_SSV = 2
|
||||
};
|
||||
|
||||
enum pnfs_layouttype {
|
||||
LAYOUT_NFSV4_1_FILES = 1,
|
||||
LAYOUT_OSD2_OBJECTS = 2,
|
||||
LAYOUT_BLOCK_VOLUME = 3,
|
||||
};
|
||||
|
||||
/* used for both layout return and recall */
|
||||
enum pnfs_layoutreturn_type {
|
||||
RETURN_FILE = 1,
|
||||
RETURN_FSID = 2,
|
||||
RETURN_ALL = 3
|
||||
};
|
||||
|
||||
enum pnfs_iomode {
|
||||
IOMODE_READ = 1,
|
||||
IOMODE_RW = 2,
|
||||
IOMODE_ANY = 3,
|
||||
};
|
||||
|
||||
enum pnfs_notify_deviceid_type4 {
|
||||
NOTIFY_DEVICEID4_CHANGE = 1 << 1,
|
||||
NOTIFY_DEVICEID4_DELETE = 1 << 2,
|
||||
};
|
||||
|
||||
#define NFL4_UFLG_MASK 0x0000003F
|
||||
#define NFL4_UFLG_DENSE 0x00000001
|
||||
#define NFL4_UFLG_COMMIT_THRU_MDS 0x00000002
|
||||
#define NFL4_UFLG_STRIPE_UNIT_SIZE_MASK 0xFFFFFFC0
|
||||
|
||||
/* Encoded in the loh_body field of type layouthint4 */
|
||||
enum filelayout_hint_care4 {
|
||||
NFLH4_CARE_DENSE = NFL4_UFLG_DENSE,
|
||||
NFLH4_CARE_COMMIT_THRU_MDS = NFL4_UFLG_COMMIT_THRU_MDS,
|
||||
NFLH4_CARE_STRIPE_UNIT_SIZE = 0x00000040,
|
||||
NFLH4_CARE_STRIPE_COUNT = 0x00000080
|
||||
};
|
||||
|
||||
#define NFS4_DEVICEID4_SIZE 16
|
||||
|
||||
struct nfs4_deviceid {
|
||||
char data[NFS4_DEVICEID4_SIZE];
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -188,6 +188,9 @@ struct nfs_inode {
|
|||
struct nfs_delegation __rcu *delegation;
|
||||
fmode_t delegation_state;
|
||||
struct rw_semaphore rwsem;
|
||||
|
||||
/* pNFS layout information */
|
||||
struct pnfs_layout_hdr *layout;
|
||||
#endif /* CONFIG_NFS_V4*/
|
||||
#ifdef CONFIG_NFS_FSCACHE
|
||||
struct fscache_cookie *fscache;
|
||||
|
|
@ -615,6 +618,8 @@ nfs_fileid_to_ino_t(u64 fileid)
|
|||
#define NFSDBG_CLIENT 0x0200
|
||||
#define NFSDBG_MOUNT 0x0400
|
||||
#define NFSDBG_FSCACHE 0x0800
|
||||
#define NFSDBG_PNFS 0x1000
|
||||
#define NFSDBG_PNFS_LD 0x2000
|
||||
#define NFSDBG_ALL 0xFFFF
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
|
|
|||
|
|
@ -82,6 +82,8 @@ struct nfs_client {
|
|||
/* The flags used for obtaining the clientid during EXCHANGE_ID */
|
||||
u32 cl_exchange_flags;
|
||||
struct nfs4_session *cl_session; /* sharred session */
|
||||
struct list_head cl_layouts;
|
||||
struct pnfs_deviceid_cache *cl_devid_cache; /* pNFS deviceid cache */
|
||||
#endif /* CONFIG_NFS_V4_1 */
|
||||
|
||||
#ifdef CONFIG_NFS_FSCACHE
|
||||
|
|
@ -145,6 +147,7 @@ struct nfs_server {
|
|||
u32 acl_bitmask; /* V4 bitmask representing the ACEs
|
||||
that are supported on this
|
||||
filesystem */
|
||||
struct pnfs_layoutdriver_type *pnfs_curr_ld; /* Active layout driver */
|
||||
#endif
|
||||
void (*destroy)(struct nfs_server *);
|
||||
|
||||
|
|
|
|||
|
|
@ -114,6 +114,7 @@ struct nfs_fsinfo {
|
|||
__u64 maxfilesize;
|
||||
struct timespec time_delta; /* server time granularity */
|
||||
__u32 lease_time; /* in seconds */
|
||||
__u32 layouttype; /* supported pnfs layout driver */
|
||||
};
|
||||
|
||||
struct nfs_fsstat {
|
||||
|
|
@ -186,6 +187,55 @@ struct nfs4_get_lease_time_res {
|
|||
struct nfs4_sequence_res lr_seq_res;
|
||||
};
|
||||
|
||||
#define PNFS_LAYOUT_MAXSIZE 4096
|
||||
|
||||
struct nfs4_layoutdriver_data {
|
||||
__u32 len;
|
||||
void *buf;
|
||||
};
|
||||
|
||||
struct pnfs_layout_range {
|
||||
u32 iomode;
|
||||
u64 offset;
|
||||
u64 length;
|
||||
};
|
||||
|
||||
struct nfs4_layoutget_args {
|
||||
__u32 type;
|
||||
struct pnfs_layout_range range;
|
||||
__u64 minlength;
|
||||
__u32 maxcount;
|
||||
struct inode *inode;
|
||||
struct nfs_open_context *ctx;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_layoutget_res {
|
||||
__u32 return_on_close;
|
||||
struct pnfs_layout_range range;
|
||||
__u32 type;
|
||||
nfs4_stateid stateid;
|
||||
struct nfs4_layoutdriver_data layout;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs4_layoutget {
|
||||
struct nfs4_layoutget_args args;
|
||||
struct nfs4_layoutget_res res;
|
||||
struct pnfs_layout_segment **lsegpp;
|
||||
int status;
|
||||
};
|
||||
|
||||
struct nfs4_getdeviceinfo_args {
|
||||
struct pnfs_device *pdev;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_getdeviceinfo_res {
|
||||
struct pnfs_device *pdev;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to the open call.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -132,6 +132,13 @@ xdr_decode_hyper(__be32 *p, __u64 *valp)
|
|||
return p + 2;
|
||||
}
|
||||
|
||||
static inline __be32 *
|
||||
xdr_decode_opaque_fixed(__be32 *p, void *ptr, unsigned int len)
|
||||
{
|
||||
memcpy(ptr, p, len);
|
||||
return p + XDR_QUADLEN(len);
|
||||
}
|
||||
|
||||
/*
|
||||
* Adjust kvec to reflect end of xdr'ed data (RPC client XDR)
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in a new issue