aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfs4state.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfsd/nfs4state.c')
-rw-r--r--fs/nfsd/nfs4state.c35
1 files changed, 17 insertions, 18 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index e00b3472851c..1f68ce36e724 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -117,7 +117,7 @@ static void release_stateid(struct nfs4_stateid *stp, int flags);
117 */ 117 */
118 118
119/* recall_lock protects the del_recall_lru */ 119/* recall_lock protects the del_recall_lru */
120spinlock_t recall_lock; 120spinlock_t recall_lock = SPIN_LOCK_UNLOCKED;
121static struct list_head del_recall_lru; 121static struct list_head del_recall_lru;
122 122
123static void 123static void
@@ -3179,23 +3179,13 @@ nfs4_check_open_reclaim(clientid_t *clid)
3179 return nfs4_find_reclaim_client(clid) ? nfs_ok : nfserr_reclaim_bad; 3179 return nfs4_find_reclaim_client(clid) ? nfs_ok : nfserr_reclaim_bad;
3180} 3180}
3181 3181
3182/* initialization to perform at module load time: */
3182 3183
3183/* 3184void
3184 * Start and stop routines 3185nfs4_state_init(void)
3185 */
3186
3187static void
3188__nfs4_state_start(void)
3189{ 3186{
3190 int i; 3187 int i;
3191 time_t grace_time;
3192 3188
3193 if (!nfs4_reclaim_init) {
3194 for (i = 0; i < CLIENT_HASH_SIZE; i++)
3195 INIT_LIST_HEAD(&reclaim_str_hashtbl[i]);
3196 reclaim_str_hashtbl_size = 0;
3197 nfs4_reclaim_init = 1;
3198 }
3199 for (i = 0; i < CLIENT_HASH_SIZE; i++) { 3189 for (i = 0; i < CLIENT_HASH_SIZE; i++) {
3200 INIT_LIST_HEAD(&conf_id_hashtbl[i]); 3190 INIT_LIST_HEAD(&conf_id_hashtbl[i]);
3201 INIT_LIST_HEAD(&conf_str_hashtbl[i]); 3191 INIT_LIST_HEAD(&conf_str_hashtbl[i]);
@@ -3217,19 +3207,28 @@ __nfs4_state_start(void)
3217 INIT_LIST_HEAD(&lock_ownerid_hashtbl[i]); 3207 INIT_LIST_HEAD(&lock_ownerid_hashtbl[i]);
3218 INIT_LIST_HEAD(&lock_ownerstr_hashtbl[i]); 3208 INIT_LIST_HEAD(&lock_ownerstr_hashtbl[i]);
3219 } 3209 }
3220 memset(&zerostateid, 0, sizeof(stateid_t));
3221 memset(&onestateid, ~0, sizeof(stateid_t)); 3210 memset(&onestateid, ~0, sizeof(stateid_t));
3222
3223 INIT_LIST_HEAD(&close_lru); 3211 INIT_LIST_HEAD(&close_lru);
3224 INIT_LIST_HEAD(&client_lru); 3212 INIT_LIST_HEAD(&client_lru);
3225 INIT_LIST_HEAD(&del_recall_lru); 3213 INIT_LIST_HEAD(&del_recall_lru);
3226 spin_lock_init(&recall_lock); 3214 for (i = 0; i < CLIENT_HASH_SIZE; i++)
3215 INIT_LIST_HEAD(&reclaim_str_hashtbl[i]);
3216 reclaim_str_hashtbl_size = 0;
3217 nfs4_reclaim_init = 1;
3218}
3219
3220/* initialization to perform when the nfsd service is started: */
3221
3222static void
3223__nfs4_state_start(void)
3224{
3225 time_t grace_time;
3226
3227 boot_time = get_seconds(); 3227 boot_time = get_seconds();
3228 grace_time = max(user_lease_time, lease_time); 3228 grace_time = max(user_lease_time, lease_time);
3229 lease_time = user_lease_time; 3229 lease_time = user_lease_time;
3230 printk("NFSD: starting %ld-second grace period\n", grace_time); 3230 printk("NFSD: starting %ld-second grace period\n", grace_time);
3231 grace_end = boot_time + grace_time; 3231 grace_end = boot_time + grace_time;
3232 INIT_WORK(&laundromat_work,laundromat_main, NULL);
3233 laundry_wq = create_singlethread_workqueue("nfsd4"); 3232 laundry_wq = create_singlethread_workqueue("nfsd4");
3234 queue_delayed_work(laundry_wq, &laundromat_work, NFSD_LEASE_TIME*HZ); 3233 queue_delayed_work(laundry_wq, &laundromat_work, NFSD_LEASE_TIME*HZ);
3235} 3234}