[PATCH] knfsd: nfsd4: clean up state initialization
authorNeilBrown <neilb@cse.unsw.edu.au>
Fri, 24 Jun 2005 05:03:30 +0000 (22:03 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Fri, 24 Jun 2005 07:06:32 +0000 (00:06 -0700)
Separate out stuff that needs initialization on startup from stuff that only
needs initialization on module init from static data.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/nfsd/nfs4state.c
fs/nfsd/nfsctl.c
include/linux/nfsd/nfsd.h

index e00b3472851cb324f752cdd91231eaea33bec888..1f68ce36e724f59851df09c5a9c26f36a526cf3a 100644 (file)
@@ -117,7 +117,7 @@ static void release_stateid(struct nfs4_stateid *stp, int flags);
  */
 
 /* recall_lock protects the del_recall_lru */
-spinlock_t recall_lock;
+spinlock_t recall_lock = SPIN_LOCK_UNLOCKED;
 static struct list_head del_recall_lru;
 
 static void
@@ -3179,23 +3179,13 @@ nfs4_check_open_reclaim(clientid_t *clid)
        return nfs4_find_reclaim_client(clid) ? nfs_ok : nfserr_reclaim_bad;
 }
 
+/* initialization to perform at module load time: */
 
-/* 
- * Start and stop routines
- */
-
-static void
-__nfs4_state_start(void)
+void
+nfs4_state_init(void)
 {
        int i;
-       time_t grace_time;
 
-       if (!nfs4_reclaim_init) {
-               for (i = 0; i < CLIENT_HASH_SIZE; i++)
-                       INIT_LIST_HEAD(&reclaim_str_hashtbl[i]);
-               reclaim_str_hashtbl_size = 0;
-               nfs4_reclaim_init = 1;
-       }
        for (i = 0; i < CLIENT_HASH_SIZE; i++) {
                INIT_LIST_HEAD(&conf_id_hashtbl[i]);
                INIT_LIST_HEAD(&conf_str_hashtbl[i]);
@@ -3217,19 +3207,28 @@ __nfs4_state_start(void)
                INIT_LIST_HEAD(&lock_ownerid_hashtbl[i]);
                INIT_LIST_HEAD(&lock_ownerstr_hashtbl[i]);
        }
-       memset(&zerostateid, 0, sizeof(stateid_t));
        memset(&onestateid, ~0, sizeof(stateid_t));
-
        INIT_LIST_HEAD(&close_lru);
        INIT_LIST_HEAD(&client_lru);
        INIT_LIST_HEAD(&del_recall_lru);
-       spin_lock_init(&recall_lock);
+       for (i = 0; i < CLIENT_HASH_SIZE; i++)
+               INIT_LIST_HEAD(&reclaim_str_hashtbl[i]);
+       reclaim_str_hashtbl_size = 0;
+       nfs4_reclaim_init = 1;
+}
+
+/* initialization to perform when the nfsd service is started: */
+
+static void
+__nfs4_state_start(void)
+{
+       time_t grace_time;
+
        boot_time = get_seconds();
        grace_time = max(user_lease_time, lease_time);
        lease_time = user_lease_time;
        printk("NFSD: starting %ld-second grace period\n", grace_time);
        grace_end = boot_time + grace_time;
-       INIT_WORK(&laundromat_work,laundromat_main, NULL);
        laundry_wq = create_singlethread_workqueue("nfsd4");
        queue_delayed_work(laundry_wq, &laundromat_work, NFSD_LEASE_TIME*HZ);
 }
index 161afdcb8f7d911b81035e3a76f20a5aad05635e..3d56531a7a03b8a2f93730808ced73a8fd07184f 100644 (file)
@@ -397,6 +397,7 @@ static int __init init_nfsd(void)
        nfsd_cache_init();      /* RPC reply cache */
        nfsd_export_init();     /* Exports table */
        nfsd_lockd_init();      /* lockd->nfsd callbacks */
+       nfs4_state_init();      /* NFSv4 locking state */
 #ifdef CONFIG_NFSD_V4
        nfsd_idmap_init();      /* Name to ID mapping */
 #endif /* CONFIG_NFSD_V4 */
index 3855fdc5af77255dd08546e77b93087a218fe7c1..21c6e9d86e4ff8a863af178568facca1a88cdcf3 100644 (file)
@@ -145,11 +145,13 @@ int nfsd_set_posix_acl(struct svc_fh *, int, struct posix_acl *);
  * NFSv4 State
  */
 #ifdef CONFIG_NFSD_V4
+void nfs4_state_init(void);
 int nfs4_state_start(void);
 void nfs4_state_shutdown(void);
 time_t nfs4_lease_time(void);
 void nfs4_reset_lease(time_t leasetime);
 #else
+static inline void nfs4_state_init(void){};
 static inline int nfs4_state_start(void){return 0;}
 static inline void nfs4_state_shutdown(void){}
 static inline time_t nfs4_lease_time(void){return 0;}