aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2010-10-25 16:48:29 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2010-10-25 16:48:29 -0400
commit74eb94b218d087798a52c0b4f1379b635287a4b8 (patch)
tree4e467c3014c2b1169f6f71d88cf5d1598f3ce28e /include/linux
parent7b6181e06841f5ad15c4ff708b967b4db65a64de (diff)
parent9a84d38031c258a17bb39beed1e500eadee67407 (diff)
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: (67 commits) SUNRPC: Cleanup duplicate assignment in rpcauth_refreshcred nfs: fix unchecked value Ask for time_delta during fsinfo probe Revalidate caches on lock SUNRPC: After calling xprt_release(), we must restart from call_reserve NFSv4: Fix up the 'dircount' hint in encode_readdir NFSv4: Clean up nfs4_decode_dirent NFSv4: nfs4_decode_dirent must clear entry->fattr->valid NFSv4: Fix a regression in decode_getfattr NFSv4: Fix up decode_attr_filehandle() to handle the case of empty fh pointer NFS: Ensure we check all allocation return values in new readdir code NFS: Readdir plus in v4 NFS: introduce generic decode_getattr function NFS: check xdr_decode for errors NFS: nfs_readdir_filler catch all errors NFS: readdir with vmapped pages NFS: remove page size checking code NFS: decode_dirent should use an xdr_stream SUNRPC: Add a helper function xdr_inline_peek NFS: remove readdir plus limit ...
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/nfs_fs.h14
-rw-r--r--include/linux/nfs_fs_sb.h1
-rw-r--r--include/linux/nfs_idmap.h31
-rw-r--r--include/linux/nfs_mount.h3
-rw-r--r--include/linux/nfs_xdr.h78
-rw-r--r--include/linux/sunrpc/clnt.h1
-rw-r--r--include/linux/sunrpc/xdr.h2
7 files changed, 76 insertions, 54 deletions
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
index d0edf7d823ae..a46e430d9622 100644
--- a/include/linux/nfs_fs.h
+++ b/include/linux/nfs_fs.h
@@ -360,10 +360,13 @@ extern void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr);
360extern struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx); 360extern struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx);
361extern void put_nfs_open_context(struct nfs_open_context *ctx); 361extern void put_nfs_open_context(struct nfs_open_context *ctx);
362extern struct nfs_open_context *nfs_find_open_context(struct inode *inode, struct rpc_cred *cred, fmode_t mode); 362extern struct nfs_open_context *nfs_find_open_context(struct inode *inode, struct rpc_cred *cred, fmode_t mode);
363extern struct nfs_open_context *alloc_nfs_open_context(struct path *path, struct rpc_cred *cred, fmode_t f_mode);
364extern void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx);
363extern struct nfs_lock_context *nfs_get_lock_context(struct nfs_open_context *ctx); 365extern struct nfs_lock_context *nfs_get_lock_context(struct nfs_open_context *ctx);
364extern void nfs_put_lock_context(struct nfs_lock_context *l_ctx); 366extern void nfs_put_lock_context(struct nfs_lock_context *l_ctx);
365extern u64 nfs_compat_user_ino64(u64 fileid); 367extern u64 nfs_compat_user_ino64(u64 fileid);
366extern void nfs_fattr_init(struct nfs_fattr *fattr); 368extern void nfs_fattr_init(struct nfs_fattr *fattr);
369extern unsigned long nfs_inc_attr_generation_counter(void);
367 370
368extern struct nfs_fattr *nfs_alloc_fattr(void); 371extern struct nfs_fattr *nfs_alloc_fattr(void);
369 372
@@ -379,9 +382,12 @@ static inline void nfs_free_fhandle(const struct nfs_fh *fh)
379 kfree(fh); 382 kfree(fh);
380} 383}
381 384
385/*
386 * linux/fs/nfs/nfsroot.c
387 */
388extern int nfs_root_data(char **root_device, char **root_data); /*__init*/
382/* linux/net/ipv4/ipconfig.c: trims ip addr off front of name, too. */ 389/* linux/net/ipv4/ipconfig.c: trims ip addr off front of name, too. */
383extern __be32 root_nfs_parse_addr(char *name); /*__init*/ 390extern __be32 root_nfs_parse_addr(char *name); /*__init*/
384extern unsigned long nfs_inc_attr_generation_counter(void);
385 391
386/* 392/*
387 * linux/fs/nfs/file.c 393 * linux/fs/nfs/file.c
@@ -479,10 +485,10 @@ extern void nfs_release_automount_timer(void);
479/* 485/*
480 * linux/fs/nfs/unlink.c 486 * linux/fs/nfs/unlink.c
481 */ 487 */
482extern int nfs_async_unlink(struct inode *dir, struct dentry *dentry);
483extern void nfs_complete_unlink(struct dentry *dentry, struct inode *); 488extern void nfs_complete_unlink(struct dentry *dentry, struct inode *);
484extern void nfs_block_sillyrename(struct dentry *dentry); 489extern void nfs_block_sillyrename(struct dentry *dentry);
485extern void nfs_unblock_sillyrename(struct dentry *dentry); 490extern void nfs_unblock_sillyrename(struct dentry *dentry);
491extern int nfs_sillyrename(struct inode *dir, struct dentry *dentry);
486 492
487/* 493/*
488 * linux/fs/nfs/write.c 494 * linux/fs/nfs/write.c
@@ -584,10 +590,6 @@ nfs_fileid_to_ino_t(u64 fileid)
584 return ino; 590 return ino;
585} 591}
586 592
587/* NFS root */
588
589extern void * nfs_root_data(void);
590
591#define nfs_wait_event(clnt, wq, condition) \ 593#define nfs_wait_event(clnt, wq, condition) \
592({ \ 594({ \
593 int __retval = wait_event_killable(wq, condition); \ 595 int __retval = wait_event_killable(wq, condition); \
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h
index c82ee7cd6288..5eef862ec187 100644
--- a/include/linux/nfs_fs_sb.h
+++ b/include/linux/nfs_fs_sb.h
@@ -124,6 +124,7 @@ struct nfs_server {
124 124
125 struct nfs_fsid fsid; 125 struct nfs_fsid fsid;
126 __u64 maxfilesize; /* maximum file size */ 126 __u64 maxfilesize; /* maximum file size */
127 struct timespec time_delta; /* smallest time granularity */
127 unsigned long mount_time; /* when this fs was mounted */ 128 unsigned long mount_time; /* when this fs was mounted */
128 dev_t s_dev; /* superblock dev numbers */ 129 dev_t s_dev; /* superblock dev numbers */
129 130
diff --git a/include/linux/nfs_idmap.h b/include/linux/nfs_idmap.h
index 91a1c24e0cbf..e8352dc5afb5 100644
--- a/include/linux/nfs_idmap.h
+++ b/include/linux/nfs_idmap.h
@@ -66,13 +66,40 @@ struct idmap_msg {
66/* Forward declaration to make this header independent of others */ 66/* Forward declaration to make this header independent of others */
67struct nfs_client; 67struct nfs_client;
68 68
69#ifdef CONFIG_NFS_USE_NEW_IDMAPPER
70
71int nfs_idmap_init(void);
72void nfs_idmap_quit(void);
73
74static inline int nfs_idmap_new(struct nfs_client *clp)
75{
76 return 0;
77}
78
79static inline void nfs_idmap_delete(struct nfs_client *clp)
80{
81}
82
83#else /* CONFIG_NFS_USE_NEW_IDMAPPER not set */
84
85static inline int nfs_idmap_init(void)
86{
87 return 0;
88}
89
90static inline void nfs_idmap_quit(void)
91{
92}
93
69int nfs_idmap_new(struct nfs_client *); 94int nfs_idmap_new(struct nfs_client *);
70void nfs_idmap_delete(struct nfs_client *); 95void nfs_idmap_delete(struct nfs_client *);
71 96
97#endif /* CONFIG_NFS_USE_NEW_IDMAPPER */
98
72int nfs_map_name_to_uid(struct nfs_client *, const char *, size_t, __u32 *); 99int nfs_map_name_to_uid(struct nfs_client *, const char *, size_t, __u32 *);
73int nfs_map_group_to_gid(struct nfs_client *, const char *, size_t, __u32 *); 100int nfs_map_group_to_gid(struct nfs_client *, const char *, size_t, __u32 *);
74int nfs_map_uid_to_name(struct nfs_client *, __u32, char *); 101int nfs_map_uid_to_name(struct nfs_client *, __u32, char *, size_t);
75int nfs_map_gid_to_group(struct nfs_client *, __u32, char *); 102int nfs_map_gid_to_group(struct nfs_client *, __u32, char *, size_t);
76 103
77extern unsigned int nfs_idmap_cache_timeout; 104extern unsigned int nfs_idmap_cache_timeout;
78#endif /* __KERNEL__ */ 105#endif /* __KERNEL__ */
diff --git a/include/linux/nfs_mount.h b/include/linux/nfs_mount.h
index 5d59ae861aa6..576bddd72e04 100644
--- a/include/linux/nfs_mount.h
+++ b/include/linux/nfs_mount.h
@@ -71,4 +71,7 @@ struct nfs_mount_data {
71#define NFS_MOUNT_NORESVPORT 0x40000 71#define NFS_MOUNT_NORESVPORT 0x40000
72#define NFS_MOUNT_LEGACY_INTERFACE 0x80000 72#define NFS_MOUNT_LEGACY_INTERFACE 0x80000
73 73
74#define NFS_MOUNT_LOCAL_FLOCK 0x100000
75#define NFS_MOUNT_LOCAL_FCNTL 0x200000
76
74#endif 77#endif
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index fc461926c412..da7a1300dc60 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -112,6 +112,7 @@ struct nfs_fsinfo {
112 __u32 wtmult; /* writes should be multiple of this */ 112 __u32 wtmult; /* writes should be multiple of this */
113 __u32 dtpref; /* pref. readdir transfer size */ 113 __u32 dtpref; /* pref. readdir transfer size */
114 __u64 maxfilesize; 114 __u64 maxfilesize;
115 struct timespec time_delta; /* server time granularity */
115 __u32 lease_time; /* in seconds */ 116 __u32 lease_time; /* in seconds */
116}; 117};
117 118
@@ -170,7 +171,7 @@ struct nfs4_sequence_args {
170 171
171struct nfs4_sequence_res { 172struct nfs4_sequence_res {
172 struct nfs4_session *sr_session; 173 struct nfs4_session *sr_session;
173 u8 sr_slotid; /* slot used to send request */ 174 struct nfs4_slot *sr_slot; /* slot used to send request */
174 int sr_status; /* sequence operation status */ 175 int sr_status; /* sequence operation status */
175 unsigned long sr_renewal_time; 176 unsigned long sr_renewal_time;
176 u32 sr_status_flags; 177 u32 sr_status_flags;
@@ -400,6 +401,27 @@ struct nfs_removeres {
400}; 401};
401 402
402/* 403/*
404 * Common arguments to the rename call
405 */
406struct nfs_renameargs {
407 const struct nfs_fh *old_dir;
408 const struct nfs_fh *new_dir;
409 const struct qstr *old_name;
410 const struct qstr *new_name;
411 const u32 *bitmask;
412 struct nfs4_sequence_args seq_args;
413};
414
415struct nfs_renameres {
416 const struct nfs_server *server;
417 struct nfs4_change_info old_cinfo;
418 struct nfs_fattr *old_fattr;
419 struct nfs4_change_info new_cinfo;
420 struct nfs_fattr *new_fattr;
421 struct nfs4_sequence_res seq_res;
422};
423
424/*
403 * Argument struct for decode_entry function 425 * Argument struct for decode_entry function
404 */ 426 */
405struct nfs_entry { 427struct nfs_entry {
@@ -434,15 +456,6 @@ struct nfs_createargs {
434 struct iattr * sattr; 456 struct iattr * sattr;
435}; 457};
436 458
437struct nfs_renameargs {
438 struct nfs_fh * fromfh;
439 const char * fromname;
440 unsigned int fromlen;
441 struct nfs_fh * tofh;
442 const char * toname;
443 unsigned int tolen;
444};
445
446struct nfs_setattrargs { 459struct nfs_setattrargs {
447 struct nfs_fh * fh; 460 struct nfs_fh * fh;
448 nfs4_stateid stateid; 461 nfs4_stateid stateid;
@@ -586,15 +599,6 @@ struct nfs3_mknodargs {
586 dev_t rdev; 599 dev_t rdev;
587}; 600};
588 601
589struct nfs3_renameargs {
590 struct nfs_fh * fromfh;
591 const char * fromname;
592 unsigned int fromlen;
593 struct nfs_fh * tofh;
594 const char * toname;
595 unsigned int tolen;
596};
597
598struct nfs3_linkargs { 602struct nfs3_linkargs {
599 struct nfs_fh * fromfh; 603 struct nfs_fh * fromfh;
600 struct nfs_fh * tofh; 604 struct nfs_fh * tofh;
@@ -629,11 +633,6 @@ struct nfs3_readlinkargs {
629 struct page ** pages; 633 struct page ** pages;
630}; 634};
631 635
632struct nfs3_renameres {
633 struct nfs_fattr * fromattr;
634 struct nfs_fattr * toattr;
635};
636
637struct nfs3_linkres { 636struct nfs3_linkres {
638 struct nfs_fattr * dir_attr; 637 struct nfs_fattr * dir_attr;
639 struct nfs_fattr * fattr; 638 struct nfs_fattr * fattr;
@@ -780,6 +779,7 @@ struct nfs4_readdir_arg {
780 struct page ** pages; /* zero-copy data */ 779 struct page ** pages; /* zero-copy data */
781 unsigned int pgbase; /* zero-copy data */ 780 unsigned int pgbase; /* zero-copy data */
782 const u32 * bitmask; 781 const u32 * bitmask;
782 int plus;
783 struct nfs4_sequence_args seq_args; 783 struct nfs4_sequence_args seq_args;
784}; 784};
785 785
@@ -801,24 +801,6 @@ struct nfs4_readlink_res {
801 struct nfs4_sequence_res seq_res; 801 struct nfs4_sequence_res seq_res;
802}; 802};
803 803
804struct nfs4_rename_arg {
805 const struct nfs_fh * old_dir;
806 const struct nfs_fh * new_dir;
807 const struct qstr * old_name;
808 const struct qstr * new_name;
809 const u32 * bitmask;
810 struct nfs4_sequence_args seq_args;
811};
812
813struct nfs4_rename_res {
814 const struct nfs_server * server;
815 struct nfs4_change_info old_cinfo;
816 struct nfs_fattr * old_fattr;
817 struct nfs4_change_info new_cinfo;
818 struct nfs_fattr * new_fattr;
819 struct nfs4_sequence_res seq_res;
820};
821
822#define NFS4_SETCLIENTID_NAMELEN (127) 804#define NFS4_SETCLIENTID_NAMELEN (127)
823struct nfs4_setclientid { 805struct nfs4_setclientid {
824 const nfs4_verifier * sc_verifier; 806 const nfs4_verifier * sc_verifier;
@@ -1032,19 +1014,21 @@ struct nfs_rpc_ops {
1032 int (*readlink)(struct inode *, struct page *, unsigned int, 1014 int (*readlink)(struct inode *, struct page *, unsigned int,
1033 unsigned int); 1015 unsigned int);
1034 int (*create) (struct inode *, struct dentry *, 1016 int (*create) (struct inode *, struct dentry *,
1035 struct iattr *, int, struct nameidata *); 1017 struct iattr *, int, struct nfs_open_context *);
1036 int (*remove) (struct inode *, struct qstr *); 1018 int (*remove) (struct inode *, struct qstr *);
1037 void (*unlink_setup) (struct rpc_message *, struct inode *dir); 1019 void (*unlink_setup) (struct rpc_message *, struct inode *dir);
1038 int (*unlink_done) (struct rpc_task *, struct inode *); 1020 int (*unlink_done) (struct rpc_task *, struct inode *);
1039 int (*rename) (struct inode *, struct qstr *, 1021 int (*rename) (struct inode *, struct qstr *,
1040 struct inode *, struct qstr *); 1022 struct inode *, struct qstr *);
1023 void (*rename_setup) (struct rpc_message *msg, struct inode *dir);
1024 int (*rename_done) (struct rpc_task *task, struct inode *old_dir, struct inode *new_dir);
1041 int (*link) (struct inode *, struct inode *, struct qstr *); 1025 int (*link) (struct inode *, struct inode *, struct qstr *);
1042 int (*symlink) (struct inode *, struct dentry *, struct page *, 1026 int (*symlink) (struct inode *, struct dentry *, struct page *,
1043 unsigned int, struct iattr *); 1027 unsigned int, struct iattr *);
1044 int (*mkdir) (struct inode *, struct dentry *, struct iattr *); 1028 int (*mkdir) (struct inode *, struct dentry *, struct iattr *);
1045 int (*rmdir) (struct inode *, struct qstr *); 1029 int (*rmdir) (struct inode *, struct qstr *);
1046 int (*readdir) (struct dentry *, struct rpc_cred *, 1030 int (*readdir) (struct dentry *, struct rpc_cred *,
1047 u64, struct page *, unsigned int, int); 1031 u64, struct page **, unsigned int, int);
1048 int (*mknod) (struct inode *, struct dentry *, struct iattr *, 1032 int (*mknod) (struct inode *, struct dentry *, struct iattr *,
1049 dev_t); 1033 dev_t);
1050 int (*statfs) (struct nfs_server *, struct nfs_fh *, 1034 int (*statfs) (struct nfs_server *, struct nfs_fh *,
@@ -1054,7 +1038,7 @@ struct nfs_rpc_ops {
1054 int (*pathconf) (struct nfs_server *, struct nfs_fh *, 1038 int (*pathconf) (struct nfs_server *, struct nfs_fh *,
1055 struct nfs_pathconf *); 1039 struct nfs_pathconf *);
1056 int (*set_capabilities)(struct nfs_server *, struct nfs_fh *); 1040 int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
1057 __be32 *(*decode_dirent)(__be32 *, struct nfs_entry *, int plus); 1041 __be32 *(*decode_dirent)(struct xdr_stream *, struct nfs_entry *, struct nfs_server *, int plus);
1058 void (*read_setup) (struct nfs_read_data *, struct rpc_message *); 1042 void (*read_setup) (struct nfs_read_data *, struct rpc_message *);
1059 int (*read_done) (struct rpc_task *, struct nfs_read_data *); 1043 int (*read_done) (struct rpc_task *, struct nfs_read_data *);
1060 void (*write_setup) (struct nfs_write_data *, struct rpc_message *); 1044 void (*write_setup) (struct nfs_write_data *, struct rpc_message *);
@@ -1065,6 +1049,10 @@ struct nfs_rpc_ops {
1065 int (*lock_check_bounds)(const struct file_lock *); 1049 int (*lock_check_bounds)(const struct file_lock *);
1066 void (*clear_acl_cache)(struct inode *); 1050 void (*clear_acl_cache)(struct inode *);
1067 void (*close_context)(struct nfs_open_context *ctx, int); 1051 void (*close_context)(struct nfs_open_context *ctx, int);
1052 struct inode * (*open_context) (struct inode *dir,
1053 struct nfs_open_context *ctx,
1054 int open_flags,
1055 struct iattr *iattr);
1068}; 1056};
1069 1057
1070/* 1058/*
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
index 85f38a63f098..c83df09a8e2b 100644
--- a/include/linux/sunrpc/clnt.h
+++ b/include/linux/sunrpc/clnt.h
@@ -137,7 +137,6 @@ int rpcb_register(u32, u32, int, unsigned short);
137int rpcb_v4_register(const u32 program, const u32 version, 137int rpcb_v4_register(const u32 program, const u32 version,
138 const struct sockaddr *address, 138 const struct sockaddr *address,
139 const char *netid); 139 const char *netid);
140int rpcb_getport_sync(struct sockaddr_in *, u32, u32, int);
141void rpcb_getport_async(struct rpc_task *); 140void rpcb_getport_async(struct rpc_task *);
142 141
143void rpc_call_start(struct rpc_task *); 142void rpc_call_start(struct rpc_task *);
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h
index 35cf2e8cd7c6..ab91d86565fd 100644
--- a/include/linux/sunrpc/xdr.h
+++ b/include/linux/sunrpc/xdr.h
@@ -108,6 +108,7 @@ void xdr_encode_pages(struct xdr_buf *, struct page **, unsigned int,
108 unsigned int); 108 unsigned int);
109void xdr_inline_pages(struct xdr_buf *, unsigned int, 109void xdr_inline_pages(struct xdr_buf *, unsigned int,
110 struct page **, unsigned int, unsigned int); 110 struct page **, unsigned int, unsigned int);
111void xdr_terminate_string(struct xdr_buf *, const u32);
111 112
112static inline __be32 *xdr_encode_array(__be32 *p, const void *s, unsigned int len) 113static inline __be32 *xdr_encode_array(__be32 *p, const void *s, unsigned int len)
113{ 114{
@@ -200,6 +201,7 @@ extern __be32 *xdr_reserve_space(struct xdr_stream *xdr, size_t nbytes);
200extern void xdr_write_pages(struct xdr_stream *xdr, struct page **pages, 201extern void xdr_write_pages(struct xdr_stream *xdr, struct page **pages,
201 unsigned int base, unsigned int len); 202 unsigned int base, unsigned int len);
202extern void xdr_init_decode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p); 203extern void xdr_init_decode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p);
204extern __be32 *xdr_inline_peek(struct xdr_stream *xdr, size_t nbytes);
203extern __be32 *xdr_inline_decode(struct xdr_stream *xdr, size_t nbytes); 205extern __be32 *xdr_inline_decode(struct xdr_stream *xdr, size_t nbytes);
204extern void xdr_read_pages(struct xdr_stream *xdr, unsigned int len); 206extern void xdr_read_pages(struct xdr_stream *xdr, unsigned int len);
205extern void xdr_enter_page(struct xdr_stream *xdr, unsigned int len); 207extern void xdr_enter_page(struct xdr_stream *xdr, unsigned int len);