nfsd: make client_lock per net
[pandora-kernel.git] / fs / nfsd / netns.h
index 65c2431..08d5fa1 100644 (file)
 #include <net/net_namespace.h>
 #include <net/netns/generic.h>
 
+/* Hash tables for nfs4_clientid state */
+#define CLIENT_HASH_BITS                 4
+#define CLIENT_HASH_SIZE                (1 << CLIENT_HASH_BITS)
+#define CLIENT_HASH_MASK                (CLIENT_HASH_SIZE - 1)
+
+#define LOCKOWNER_INO_HASH_BITS                8
+#define LOCKOWNER_INO_HASH_SIZE                (1 << LOCKOWNER_INO_HASH_BITS)
+
+#define SESSION_HASH_SIZE      512
+
 struct cld_net;
 
 struct nfsd_net {
@@ -38,6 +48,42 @@ struct nfsd_net {
        struct lock_manager nfsd4_manager;
        bool grace_ended;
        time_t boot_time;
+
+       /*
+        * reclaim_str_hashtbl[] holds known client info from previous reset/reboot
+        * used in reboot/reset lease grace period processing
+        *
+        * conf_id_hashtbl[], and conf_name_tree hold confirmed
+        * setclientid_confirmed info.
+        *
+        * unconf_str_hastbl[] and unconf_name_tree hold unconfirmed
+        * setclientid info.
+        */
+       struct list_head *reclaim_str_hashtbl;
+       int reclaim_str_hashtbl_size;
+       struct list_head *conf_id_hashtbl;
+       struct rb_root conf_name_tree;
+       struct list_head *unconf_id_hashtbl;
+       struct rb_root unconf_name_tree;
+       struct list_head *ownerstr_hashtbl;
+       struct list_head *lockowner_ino_hashtbl;
+       struct list_head *sessionid_hashtbl;
+       /*
+        * client_lru holds client queue ordered by nfs4_client.cl_time
+        * for lease renewal.
+        *
+        * close_lru holds (open) stateowner queue ordered by nfs4_stateowner.so_time
+        * for last close replay.
+        *
+        * All of the above fields are protected by the client_mutex.
+        */
+       struct list_head client_lru;
+       struct list_head close_lru;
+
+       struct delayed_work laundromat_work;
+
+       /* client_lock protects the client lru list and session hash table */
+       spinlock_t client_lock;
 };
 
 extern int nfsd_net_id;