diff options
| author | Alexander Graf <agraf@suse.de> | 2013-08-28 18:41:59 -0400 |
|---|---|---|
| committer | Alexander Graf <agraf@suse.de> | 2013-08-28 18:41:59 -0400 |
| commit | bf550fc93d9855872a95e69e4002256110d89858 (patch) | |
| tree | 10876bb4304bffe54c4160a132e7b8de6577ac4e /include/linux/sunrpc | |
| parent | 7e48c101e0c53e6095c5f4f5e63d14df50aae8fc (diff) | |
| parent | cc2df20c7c4ce594c3e17e9cc260c330646012c8 (diff) | |
Merge remote-tracking branch 'origin/next' into kvm-ppc-next
Conflicts:
mm/Kconfig
CMA DMA split and ZSWAP introduction were conflicting, fix up manually.
Diffstat (limited to 'include/linux/sunrpc')
| -rw-r--r-- | include/linux/sunrpc/cache.h | 49 | ||||
| -rw-r--r-- | include/linux/sunrpc/gss_api.h | 2 | ||||
| -rw-r--r-- | include/linux/sunrpc/rpc_pipe_fs.h | 4 | ||||
| -rw-r--r-- | include/linux/sunrpc/sched.h | 20 | ||||
| -rw-r--r-- | include/linux/sunrpc/svcauth.h | 11 |
5 files changed, 37 insertions, 49 deletions
diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h index 303399b1ba59..6ce690de447f 100644 --- a/include/linux/sunrpc/cache.h +++ b/include/linux/sunrpc/cache.h | |||
| @@ -57,6 +57,7 @@ struct cache_head { | |||
| 57 | #define CACHE_VALID 0 /* Entry contains valid data */ | 57 | #define CACHE_VALID 0 /* Entry contains valid data */ |
| 58 | #define CACHE_NEGATIVE 1 /* Negative entry - there is no match for the key */ | 58 | #define CACHE_NEGATIVE 1 /* Negative entry - there is no match for the key */ |
| 59 | #define CACHE_PENDING 2 /* An upcall has been sent but no reply received yet*/ | 59 | #define CACHE_PENDING 2 /* An upcall has been sent but no reply received yet*/ |
| 60 | #define CACHE_CLEANED 3 /* Entry has been cleaned from cache */ | ||
| 60 | 61 | ||
| 61 | #define CACHE_NEW_EXPIRY 120 /* keep new things pending confirmation for 120 seconds */ | 62 | #define CACHE_NEW_EXPIRY 120 /* keep new things pending confirmation for 120 seconds */ |
| 62 | 63 | ||
| @@ -148,6 +149,24 @@ struct cache_deferred_req { | |||
| 148 | int too_many); | 149 | int too_many); |
| 149 | }; | 150 | }; |
| 150 | 151 | ||
| 152 | /* | ||
| 153 | * timestamps kept in the cache are expressed in seconds | ||
| 154 | * since boot. This is the best for measuring differences in | ||
| 155 | * real time. | ||
| 156 | */ | ||
| 157 | static inline time_t seconds_since_boot(void) | ||
| 158 | { | ||
| 159 | struct timespec boot; | ||
| 160 | getboottime(&boot); | ||
| 161 | return get_seconds() - boot.tv_sec; | ||
| 162 | } | ||
| 163 | |||
| 164 | static inline time_t convert_to_wallclock(time_t sinceboot) | ||
| 165 | { | ||
| 166 | struct timespec boot; | ||
| 167 | getboottime(&boot); | ||
| 168 | return boot.tv_sec + sinceboot; | ||
| 169 | } | ||
| 151 | 170 | ||
| 152 | extern const struct file_operations cache_file_operations_pipefs; | 171 | extern const struct file_operations cache_file_operations_pipefs; |
| 153 | extern const struct file_operations content_file_operations_pipefs; | 172 | extern const struct file_operations content_file_operations_pipefs; |
| @@ -181,15 +200,10 @@ static inline void cache_put(struct cache_head *h, struct cache_detail *cd) | |||
| 181 | kref_put(&h->ref, cd->cache_put); | 200 | kref_put(&h->ref, cd->cache_put); |
| 182 | } | 201 | } |
| 183 | 202 | ||
| 184 | static inline int cache_valid(struct cache_head *h) | 203 | static inline int cache_is_expired(struct cache_detail *detail, struct cache_head *h) |
| 185 | { | 204 | { |
| 186 | /* If an item has been unhashed pending removal when | 205 | return (h->expiry_time < seconds_since_boot()) || |
| 187 | * the refcount drops to 0, the expiry_time will be | 206 | (detail->flush_time > h->last_refresh); |
| 188 | * set to 0. We don't want to consider such items | ||
| 189 | * valid in this context even though CACHE_VALID is | ||
| 190 | * set. | ||
| 191 | */ | ||
| 192 | return (h->expiry_time != 0 && test_bit(CACHE_VALID, &h->flags)); | ||
| 193 | } | 207 | } |
| 194 | 208 | ||
| 195 | extern int cache_check(struct cache_detail *detail, | 209 | extern int cache_check(struct cache_detail *detail, |
| @@ -250,25 +264,6 @@ static inline int get_uint(char **bpp, unsigned int *anint) | |||
| 250 | return 0; | 264 | return 0; |
| 251 | } | 265 | } |
| 252 | 266 | ||
| 253 | /* | ||
| 254 | * timestamps kept in the cache are expressed in seconds | ||
| 255 | * since boot. This is the best for measuring differences in | ||
| 256 | * real time. | ||
| 257 | */ | ||
| 258 | static inline time_t seconds_since_boot(void) | ||
| 259 | { | ||
| 260 | struct timespec boot; | ||
| 261 | getboottime(&boot); | ||
| 262 | return get_seconds() - boot.tv_sec; | ||
| 263 | } | ||
| 264 | |||
| 265 | static inline time_t convert_to_wallclock(time_t sinceboot) | ||
| 266 | { | ||
| 267 | struct timespec boot; | ||
| 268 | getboottime(&boot); | ||
| 269 | return boot.tv_sec + sinceboot; | ||
| 270 | } | ||
| 271 | |||
| 272 | static inline time_t get_expiry(char **bpp) | 267 | static inline time_t get_expiry(char **bpp) |
| 273 | { | 268 | { |
| 274 | int rv; | 269 | int rv; |
diff --git a/include/linux/sunrpc/gss_api.h b/include/linux/sunrpc/gss_api.h index 161463e59624..1f911ccb2a75 100644 --- a/include/linux/sunrpc/gss_api.h +++ b/include/linux/sunrpc/gss_api.h | |||
| @@ -151,6 +151,8 @@ struct gss_api_mech *gss_mech_get_by_pseudoflavor(u32); | |||
| 151 | /* Fill in an array with a list of supported pseudoflavors */ | 151 | /* Fill in an array with a list of supported pseudoflavors */ |
| 152 | int gss_mech_list_pseudoflavors(rpc_authflavor_t *, int); | 152 | int gss_mech_list_pseudoflavors(rpc_authflavor_t *, int); |
| 153 | 153 | ||
| 154 | struct gss_api_mech * gss_mech_get(struct gss_api_mech *); | ||
| 155 | |||
| 154 | /* For every successful gss_mech_get or gss_mech_get_by_* call there must be a | 156 | /* For every successful gss_mech_get or gss_mech_get_by_* call there must be a |
| 155 | * corresponding call to gss_mech_put. */ | 157 | * corresponding call to gss_mech_put. */ |
| 156 | void gss_mech_put(struct gss_api_mech *); | 158 | void gss_mech_put(struct gss_api_mech *); |
diff --git a/include/linux/sunrpc/rpc_pipe_fs.h b/include/linux/sunrpc/rpc_pipe_fs.h index a7b422b33eda..aa5b582cc471 100644 --- a/include/linux/sunrpc/rpc_pipe_fs.h +++ b/include/linux/sunrpc/rpc_pipe_fs.h | |||
| @@ -73,12 +73,12 @@ extern ssize_t rpc_pipe_generic_upcall(struct file *, struct rpc_pipe_msg *, | |||
| 73 | extern int rpc_queue_upcall(struct rpc_pipe *, struct rpc_pipe_msg *); | 73 | extern int rpc_queue_upcall(struct rpc_pipe *, struct rpc_pipe_msg *); |
| 74 | 74 | ||
| 75 | struct rpc_clnt; | 75 | struct rpc_clnt; |
| 76 | extern struct dentry *rpc_create_client_dir(struct dentry *, struct qstr *, struct rpc_clnt *); | 76 | extern struct dentry *rpc_create_client_dir(struct dentry *, const char *, struct rpc_clnt *); |
| 77 | extern int rpc_remove_client_dir(struct dentry *); | 77 | extern int rpc_remove_client_dir(struct dentry *); |
| 78 | 78 | ||
| 79 | struct cache_detail; | 79 | struct cache_detail; |
| 80 | extern struct dentry *rpc_create_cache_dir(struct dentry *, | 80 | extern struct dentry *rpc_create_cache_dir(struct dentry *, |
| 81 | struct qstr *, | 81 | const char *, |
| 82 | umode_t umode, | 82 | umode_t umode, |
| 83 | struct cache_detail *); | 83 | struct cache_detail *); |
| 84 | extern void rpc_remove_cache_dir(struct dentry *); | 84 | extern void rpc_remove_cache_dir(struct dentry *); |
diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h index 84ca436b76c2..6d870353674a 100644 --- a/include/linux/sunrpc/sched.h +++ b/include/linux/sunrpc/sched.h | |||
| @@ -88,15 +88,6 @@ struct rpc_task { | |||
| 88 | tk_rebind_retry : 2; | 88 | tk_rebind_retry : 2; |
| 89 | }; | 89 | }; |
| 90 | 90 | ||
| 91 | /* support walking a list of tasks on a wait queue */ | ||
| 92 | #define task_for_each(task, pos, head) \ | ||
| 93 | list_for_each(pos, head) \ | ||
| 94 | if ((task=list_entry(pos, struct rpc_task, u.tk_wait.list)),1) | ||
| 95 | |||
| 96 | #define task_for_first(task, head) \ | ||
| 97 | if (!list_empty(head) && \ | ||
| 98 | ((task=list_entry((head)->next, struct rpc_task, u.tk_wait.list)),1)) | ||
| 99 | |||
| 100 | typedef void (*rpc_action)(struct rpc_task *); | 91 | typedef void (*rpc_action)(struct rpc_task *); |
| 101 | 92 | ||
| 102 | struct rpc_call_ops { | 93 | struct rpc_call_ops { |
| @@ -238,7 +229,6 @@ struct rpc_task *rpc_wake_up_first(struct rpc_wait_queue *, | |||
| 238 | bool (*)(struct rpc_task *, void *), | 229 | bool (*)(struct rpc_task *, void *), |
| 239 | void *); | 230 | void *); |
| 240 | void rpc_wake_up_status(struct rpc_wait_queue *, int); | 231 | void rpc_wake_up_status(struct rpc_wait_queue *, int); |
| 241 | int rpc_queue_empty(struct rpc_wait_queue *); | ||
| 242 | void rpc_delay(struct rpc_task *, unsigned long); | 232 | void rpc_delay(struct rpc_task *, unsigned long); |
| 243 | void * rpc_malloc(struct rpc_task *, size_t); | 233 | void * rpc_malloc(struct rpc_task *, size_t); |
| 244 | void rpc_free(void *); | 234 | void rpc_free(void *); |
| @@ -259,16 +249,6 @@ static inline int rpc_wait_for_completion_task(struct rpc_task *task) | |||
| 259 | return __rpc_wait_for_completion_task(task, NULL); | 249 | return __rpc_wait_for_completion_task(task, NULL); |
| 260 | } | 250 | } |
| 261 | 251 | ||
| 262 | static inline void rpc_task_set_priority(struct rpc_task *task, unsigned char prio) | ||
| 263 | { | ||
| 264 | task->tk_priority = prio - RPC_PRIORITY_LOW; | ||
| 265 | } | ||
| 266 | |||
| 267 | static inline int rpc_task_has_priority(struct rpc_task *task, unsigned char prio) | ||
| 268 | { | ||
| 269 | return (task->tk_priority + RPC_PRIORITY_LOW == prio); | ||
| 270 | } | ||
| 271 | |||
| 272 | #if defined(RPC_DEBUG) || defined (RPC_TRACEPOINTS) | 252 | #if defined(RPC_DEBUG) || defined (RPC_TRACEPOINTS) |
| 273 | static inline const char * rpc_qname(const struct rpc_wait_queue *q) | 253 | static inline const char * rpc_qname(const struct rpc_wait_queue *q) |
| 274 | { | 254 | { |
diff --git a/include/linux/sunrpc/svcauth.h b/include/linux/sunrpc/svcauth.h index ff374ab30839..8d71d6577459 100644 --- a/include/linux/sunrpc/svcauth.h +++ b/include/linux/sunrpc/svcauth.h | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/string.h> | 14 | #include <linux/string.h> |
| 15 | #include <linux/sunrpc/msg_prot.h> | 15 | #include <linux/sunrpc/msg_prot.h> |
| 16 | #include <linux/sunrpc/cache.h> | 16 | #include <linux/sunrpc/cache.h> |
| 17 | #include <linux/sunrpc/gss_api.h> | ||
| 17 | #include <linux/hash.h> | 18 | #include <linux/hash.h> |
| 18 | #include <linux/cred.h> | 19 | #include <linux/cred.h> |
| 19 | 20 | ||
| @@ -23,13 +24,23 @@ struct svc_cred { | |||
| 23 | struct group_info *cr_group_info; | 24 | struct group_info *cr_group_info; |
| 24 | u32 cr_flavor; /* pseudoflavor */ | 25 | u32 cr_flavor; /* pseudoflavor */ |
| 25 | char *cr_principal; /* for gss */ | 26 | char *cr_principal; /* for gss */ |
| 27 | struct gss_api_mech *cr_gss_mech; | ||
| 26 | }; | 28 | }; |
| 27 | 29 | ||
| 30 | static inline void init_svc_cred(struct svc_cred *cred) | ||
| 31 | { | ||
| 32 | cred->cr_group_info = NULL; | ||
| 33 | cred->cr_principal = NULL; | ||
| 34 | cred->cr_gss_mech = NULL; | ||
| 35 | } | ||
| 36 | |||
| 28 | static inline void free_svc_cred(struct svc_cred *cred) | 37 | static inline void free_svc_cred(struct svc_cred *cred) |
| 29 | { | 38 | { |
| 30 | if (cred->cr_group_info) | 39 | if (cred->cr_group_info) |
| 31 | put_group_info(cred->cr_group_info); | 40 | put_group_info(cred->cr_group_info); |
| 32 | kfree(cred->cr_principal); | 41 | kfree(cred->cr_principal); |
| 42 | gss_mech_put(cred->cr_gss_mech); | ||
| 43 | init_svc_cred(cred); | ||
| 33 | } | 44 | } |
| 34 | 45 | ||
| 35 | struct svc_rqst; /* forward decl */ | 46 | struct svc_rqst; /* forward decl */ |
