Whamcloud - gitweb
b=21454 Disable cl_page_in_io check for append write.
[fs/lustre-release.git] / lustre / obdclass / lustre_handles.c
index 23d25dc..b8b07ba 100644 (file)
@@ -16,8 +16,8 @@
  * in the LICENSE file that accompanied this code).
  *
  * You should have received a copy of the GNU General Public License
- * version 2 along with this program; If not, see [sun.com URL with a
- * copy of GPLv2].
+ * version 2 along with this program; If not, see
+ * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
  *
  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  * CA 95054 USA or visit www.sun.com if you need additional information or
@@ -177,7 +177,7 @@ void class_handle_hash_back(struct portals_handle *h)
 void *class_handle2object(__u64 cookie)
 {
         struct handle_bucket *bucket;
-        struct list_head *tmp;
+        struct portals_handle *h;
         void *retval = NULL;
         ENTRY;
 
@@ -188,9 +188,7 @@ void *class_handle2object(__u64 cookie)
         bucket = handle_hash + (cookie & HANDLE_HASH_MASK);
 
         rcu_read_lock();
-        list_for_each_rcu(tmp, &bucket->head) {
-                struct portals_handle *h;
-                h = list_entry(tmp, struct portals_handle, h_link);
+        list_for_each_entry_rcu(h, &bucket->head, h_link) {
                 if (h->h_cookie != cookie)
                         continue;
 
@@ -222,6 +220,8 @@ void class_handle_free_cb(struct rcu_head *rcu)
 int class_handle_init(void)
 {
         struct handle_bucket *bucket;
+        struct timeval tv;
+        int seed[2];
 
         LASSERT(handle_hash == NULL);
 
@@ -235,6 +235,12 @@ int class_handle_init(void)
                 CFS_INIT_LIST_HEAD(&bucket->head);
                 spin_lock_init(&bucket->lock);
         }
+
+        /** bug 21430: add randomness to the initial base */
+        ll_get_random_bytes(seed, sizeof(seed));
+        do_gettimeofday(&tv);
+        ll_srand(tv.tv_sec ^ seed[0], tv.tv_usec ^ seed[1]);
+
         ll_get_random_bytes(&handle_base, sizeof(handle_base));
         LASSERT(handle_base != 0ULL);
 
@@ -246,12 +252,10 @@ static void cleanup_all_handles(void)
         int i;
 
         for (i = 0; i < HANDLE_HASH_SIZE; i++) {
-                struct list_head *tmp, *pos;
-                spin_lock(&handle_hash[i].lock);
-                list_for_each_safe_rcu(tmp, pos, &(handle_hash[i].head)) {
-                        struct portals_handle *h;
-                        h = list_entry(tmp, struct portals_handle, h_link);
+                struct portals_handle *h;
 
+                spin_lock(&handle_hash[i].lock);
+                list_for_each_entry_rcu(h, &(handle_hash[i].head), h_link) {
                         CERROR("force clean handle "LPX64" addr %p addref %p\n",
                                h->h_cookie, h, h->h_addref);