diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-13 20:13:19 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-13 20:13:19 -0400 |
| commit | 06b8ab55289345ab191bf4bf0e4acc6d4bdf293d (patch) | |
| tree | 9af9215097e26c026f30a58c6ca3092ec15d1e1e /include/linux | |
| parent | dc1cc85133120e49c223f36aa77d398b8abac727 (diff) | |
| parent | 71a6ec8ac587418ceb6b420def1ca44b334c1ff7 (diff) | |
Merge tag 'nfs-for-3.17-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
Pull NFS client updates from Trond Myklebust:
"Highlights include:
- stable fix for a bug in nfs3_list_one_acl()
- speed up NFS path walks by supporting LOOKUP_RCU
- more read/write code cleanups
- pNFS fixes for layout return on close
- fixes for the RCU handling in the rpcsec_gss code
- more NFS/RDMA fixes"
* tag 'nfs-for-3.17-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (79 commits)
nfs: reject changes to resvport and sharecache during remount
NFS: Avoid infinite loop when RELEASE_LOCKOWNER getting expired error
SUNRPC: remove all refcounting of groupinfo from rpcauth_lookupcred
NFS: fix two problems in lookup_revalidate in RCU-walk
NFS: allow lockless access to access_cache
NFS: teach nfs_lookup_verify_inode to handle LOOKUP_RCU
NFS: teach nfs_neg_need_reval to understand LOOKUP_RCU
NFS: support RCU_WALK in nfs_permission()
sunrpc/auth: allow lockless (rcu) lookup of credential cache.
NFS: prepare for RCU-walk support but pushing tests later in code.
NFS: nfs4_lookup_revalidate: only evaluate parent if it will be used.
NFS: add checks for returned value of try_module_get()
nfs: clear_request_commit while holding i_lock
pnfs: add pnfs_put_lseg_async
pnfs: find swapped pages on pnfs commit lists too
nfs: fix comment and add warn_on for PG_INODE_REF
nfs: check wait_on_bit_lock err in page_group_lock
sunrpc: remove "ec" argument from encrypt_v2 operation
sunrpc: clean up sparse endianness warnings in gss_krb5_wrap.c
sunrpc: clean up sparse endianness warnings in gss_krb5_seal.c
...
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/nfs_fs.h | 2 | ||||
| -rw-r--r-- | include/linux/nfs_fs_sb.h | 1 | ||||
| -rw-r--r-- | include/linux/nfs_page.h | 19 | ||||
| -rw-r--r-- | include/linux/nfs_xdr.h | 34 | ||||
| -rw-r--r-- | include/linux/sunrpc/auth.h | 4 | ||||
| -rw-r--r-- | include/linux/sunrpc/auth_gss.h | 3 | ||||
| -rw-r--r-- | include/linux/sunrpc/gss_krb5.h | 4 | ||||
| -rw-r--r-- | include/linux/sunrpc/xprtrdma.h | 2 |
8 files changed, 34 insertions, 35 deletions
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index e30f6059ecd6..5180a7ededec 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
| @@ -52,6 +52,7 @@ struct nfs_access_entry { | |||
| 52 | unsigned long jiffies; | 52 | unsigned long jiffies; |
| 53 | struct rpc_cred * cred; | 53 | struct rpc_cred * cred; |
| 54 | int mask; | 54 | int mask; |
| 55 | struct rcu_head rcu_head; | ||
| 55 | }; | 56 | }; |
| 56 | 57 | ||
| 57 | struct nfs_lockowner { | 58 | struct nfs_lockowner { |
| @@ -352,6 +353,7 @@ extern int nfs_release(struct inode *, struct file *); | |||
| 352 | extern int nfs_attribute_timeout(struct inode *inode); | 353 | extern int nfs_attribute_timeout(struct inode *inode); |
| 353 | extern int nfs_attribute_cache_expired(struct inode *inode); | 354 | extern int nfs_attribute_cache_expired(struct inode *inode); |
| 354 | extern int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode); | 355 | extern int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode); |
| 356 | extern int nfs_revalidate_inode_rcu(struct nfs_server *server, struct inode *inode); | ||
| 355 | extern int __nfs_revalidate_inode(struct nfs_server *, struct inode *); | 357 | extern int __nfs_revalidate_inode(struct nfs_server *, struct inode *); |
| 356 | extern int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping); | 358 | extern int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping); |
| 357 | extern int nfs_setattr(struct dentry *, struct iattr *); | 359 | extern int nfs_setattr(struct dentry *, struct iattr *); |
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 1150ea41b626..922be2e050f5 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h | |||
| @@ -45,6 +45,7 @@ struct nfs_client { | |||
| 45 | struct sockaddr_storage cl_addr; /* server identifier */ | 45 | struct sockaddr_storage cl_addr; /* server identifier */ |
| 46 | size_t cl_addrlen; | 46 | size_t cl_addrlen; |
| 47 | char * cl_hostname; /* hostname of server */ | 47 | char * cl_hostname; /* hostname of server */ |
| 48 | char * cl_acceptor; /* GSSAPI acceptor name */ | ||
| 48 | struct list_head cl_share_link; /* link in global client list */ | 49 | struct list_head cl_share_link; /* link in global client list */ |
| 49 | struct list_head cl_superblocks; /* List of nfs_server structs */ | 50 | struct list_head cl_superblocks; /* List of nfs_server structs */ |
| 50 | 51 | ||
diff --git a/include/linux/nfs_page.h b/include/linux/nfs_page.h index 7d9096d95d4a..6ad2bbcad405 100644 --- a/include/linux/nfs_page.h +++ b/include/linux/nfs_page.h | |||
| @@ -26,7 +26,7 @@ enum { | |||
| 26 | PG_MAPPED, /* page private set for buffered io */ | 26 | PG_MAPPED, /* page private set for buffered io */ |
| 27 | PG_CLEAN, /* write succeeded */ | 27 | PG_CLEAN, /* write succeeded */ |
| 28 | PG_COMMIT_TO_DS, /* used by pnfs layouts */ | 28 | PG_COMMIT_TO_DS, /* used by pnfs layouts */ |
| 29 | PG_INODE_REF, /* extra ref held by inode (head req only) */ | 29 | PG_INODE_REF, /* extra ref held by inode when in writeback */ |
| 30 | PG_HEADLOCK, /* page group lock of wb_head */ | 30 | PG_HEADLOCK, /* page group lock of wb_head */ |
| 31 | PG_TEARDOWN, /* page group sync for destroy */ | 31 | PG_TEARDOWN, /* page group sync for destroy */ |
| 32 | PG_UNLOCKPAGE, /* page group sync bit in read path */ | 32 | PG_UNLOCKPAGE, /* page group sync bit in read path */ |
| @@ -62,12 +62,13 @@ struct nfs_pageio_ops { | |||
| 62 | 62 | ||
| 63 | struct nfs_rw_ops { | 63 | struct nfs_rw_ops { |
| 64 | const fmode_t rw_mode; | 64 | const fmode_t rw_mode; |
| 65 | struct nfs_rw_header *(*rw_alloc_header)(void); | 65 | struct nfs_pgio_header *(*rw_alloc_header)(void); |
| 66 | void (*rw_free_header)(struct nfs_rw_header *); | 66 | void (*rw_free_header)(struct nfs_pgio_header *); |
| 67 | void (*rw_release)(struct nfs_pgio_data *); | 67 | void (*rw_release)(struct nfs_pgio_header *); |
| 68 | int (*rw_done)(struct rpc_task *, struct nfs_pgio_data *, struct inode *); | 68 | int (*rw_done)(struct rpc_task *, struct nfs_pgio_header *, |
| 69 | void (*rw_result)(struct rpc_task *, struct nfs_pgio_data *); | 69 | struct inode *); |
| 70 | void (*rw_initiate)(struct nfs_pgio_data *, struct rpc_message *, | 70 | void (*rw_result)(struct rpc_task *, struct nfs_pgio_header *); |
| 71 | void (*rw_initiate)(struct nfs_pgio_header *, struct rpc_message *, | ||
| 71 | struct rpc_task_setup *, int); | 72 | struct rpc_task_setup *, int); |
| 72 | }; | 73 | }; |
| 73 | 74 | ||
| @@ -111,6 +112,8 @@ extern void nfs_pageio_init(struct nfs_pageio_descriptor *desc, | |||
| 111 | int how); | 112 | int how); |
| 112 | extern int nfs_pageio_add_request(struct nfs_pageio_descriptor *, | 113 | extern int nfs_pageio_add_request(struct nfs_pageio_descriptor *, |
| 113 | struct nfs_page *); | 114 | struct nfs_page *); |
| 115 | extern int nfs_pageio_resend(struct nfs_pageio_descriptor *, | ||
| 116 | struct nfs_pgio_header *); | ||
| 114 | extern void nfs_pageio_complete(struct nfs_pageio_descriptor *desc); | 117 | extern void nfs_pageio_complete(struct nfs_pageio_descriptor *desc); |
| 115 | extern void nfs_pageio_cond_complete(struct nfs_pageio_descriptor *, pgoff_t); | 118 | extern void nfs_pageio_cond_complete(struct nfs_pageio_descriptor *, pgoff_t); |
| 116 | extern size_t nfs_generic_pg_test(struct nfs_pageio_descriptor *desc, | 119 | extern size_t nfs_generic_pg_test(struct nfs_pageio_descriptor *desc, |
| @@ -119,7 +122,7 @@ extern size_t nfs_generic_pg_test(struct nfs_pageio_descriptor *desc, | |||
| 119 | extern int nfs_wait_on_request(struct nfs_page *); | 122 | extern int nfs_wait_on_request(struct nfs_page *); |
| 120 | extern void nfs_unlock_request(struct nfs_page *req); | 123 | extern void nfs_unlock_request(struct nfs_page *req); |
| 121 | extern void nfs_unlock_and_release_request(struct nfs_page *); | 124 | extern void nfs_unlock_and_release_request(struct nfs_page *); |
| 122 | extern void nfs_page_group_lock(struct nfs_page *); | 125 | extern int nfs_page_group_lock(struct nfs_page *, bool); |
| 123 | extern void nfs_page_group_unlock(struct nfs_page *); | 126 | extern void nfs_page_group_unlock(struct nfs_page *); |
| 124 | extern bool nfs_page_group_sync_on_bit(struct nfs_page *, unsigned int); | 127 | extern bool nfs_page_group_sync_on_bit(struct nfs_page *, unsigned int); |
| 125 | 128 | ||
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 9a1396e70310..0040629894df 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
| @@ -993,6 +993,7 @@ struct nfs4_setclientid { | |||
| 993 | unsigned int sc_uaddr_len; | 993 | unsigned int sc_uaddr_len; |
| 994 | char sc_uaddr[RPCBIND_MAXUADDRLEN + 1]; | 994 | char sc_uaddr[RPCBIND_MAXUADDRLEN + 1]; |
| 995 | u32 sc_cb_ident; | 995 | u32 sc_cb_ident; |
| 996 | struct rpc_cred *sc_cred; | ||
| 996 | }; | 997 | }; |
| 997 | 998 | ||
| 998 | struct nfs4_setclientid_res { | 999 | struct nfs4_setclientid_res { |
| @@ -1253,18 +1254,12 @@ enum { | |||
| 1253 | NFS_IOHDR_ERROR = 0, | 1254 | NFS_IOHDR_ERROR = 0, |
| 1254 | NFS_IOHDR_EOF, | 1255 | NFS_IOHDR_EOF, |
| 1255 | NFS_IOHDR_REDO, | 1256 | NFS_IOHDR_REDO, |
| 1256 | NFS_IOHDR_NEED_COMMIT, | ||
| 1257 | NFS_IOHDR_NEED_RESCHED, | ||
| 1258 | }; | 1257 | }; |
| 1259 | 1258 | ||
| 1260 | struct nfs_pgio_data; | ||
| 1261 | |||
| 1262 | struct nfs_pgio_header { | 1259 | struct nfs_pgio_header { |
| 1263 | struct inode *inode; | 1260 | struct inode *inode; |
| 1264 | struct rpc_cred *cred; | 1261 | struct rpc_cred *cred; |
| 1265 | struct list_head pages; | 1262 | struct list_head pages; |
| 1266 | struct nfs_pgio_data *data; | ||
| 1267 | atomic_t refcnt; | ||
| 1268 | struct nfs_page *req; | 1263 | struct nfs_page *req; |
| 1269 | struct nfs_writeverf verf; /* Used for writes */ | 1264 | struct nfs_writeverf verf; /* Used for writes */ |
| 1270 | struct pnfs_layout_segment *lseg; | 1265 | struct pnfs_layout_segment *lseg; |
| @@ -1281,28 +1276,22 @@ struct nfs_pgio_header { | |||
| 1281 | int error; /* merge with pnfs_error */ | 1276 | int error; /* merge with pnfs_error */ |
| 1282 | unsigned long good_bytes; /* boundary of good data */ | 1277 | unsigned long good_bytes; /* boundary of good data */ |
| 1283 | unsigned long flags; | 1278 | unsigned long flags; |
| 1284 | }; | ||
| 1285 | 1279 | ||
| 1286 | struct nfs_pgio_data { | 1280 | /* |
| 1287 | struct nfs_pgio_header *header; | 1281 | * rpc data |
| 1282 | */ | ||
| 1288 | struct rpc_task task; | 1283 | struct rpc_task task; |
| 1289 | struct nfs_fattr fattr; | 1284 | struct nfs_fattr fattr; |
| 1290 | struct nfs_writeverf verf; /* Used for writes */ | ||
| 1291 | struct nfs_pgio_args args; /* argument struct */ | 1285 | struct nfs_pgio_args args; /* argument struct */ |
| 1292 | struct nfs_pgio_res res; /* result struct */ | 1286 | struct nfs_pgio_res res; /* result struct */ |
| 1293 | unsigned long timestamp; /* For lease renewal */ | 1287 | unsigned long timestamp; /* For lease renewal */ |
| 1294 | int (*pgio_done_cb) (struct rpc_task *task, struct nfs_pgio_data *data); | 1288 | int (*pgio_done_cb)(struct rpc_task *, struct nfs_pgio_header *); |
| 1295 | __u64 mds_offset; /* Filelayout dense stripe */ | 1289 | __u64 mds_offset; /* Filelayout dense stripe */ |
| 1296 | struct nfs_page_array pages; | 1290 | struct nfs_page_array page_array; |
| 1297 | struct nfs_client *ds_clp; /* pNFS data server */ | 1291 | struct nfs_client *ds_clp; /* pNFS data server */ |
| 1298 | int ds_idx; /* ds index if ds_clp is set */ | 1292 | int ds_idx; /* ds index if ds_clp is set */ |
| 1299 | }; | 1293 | }; |
| 1300 | 1294 | ||
| 1301 | struct nfs_rw_header { | ||
| 1302 | struct nfs_pgio_header header; | ||
| 1303 | struct nfs_pgio_data rpc_data; | ||
| 1304 | }; | ||
| 1305 | |||
