sunrpc/cache: use list_del_init for the list_head entries in cache_deferred_req
authorNeilBrown <neilb@suse.de>
Wed, 9 Sep 2009 06:32:54 +0000 (16:32 +1000)
committerJ. Bruce Fields <bfields@citi.umich.edu>
Fri, 18 Sep 2009 15:47:49 +0000 (11:47 -0400)
Using list_del_init is generally safer than list_del, and it will
allow us, in a subsequent patch, to see if an entry has already been
processed or not.

Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
net/sunrpc/cache.c

index f2895d0..4a32a30 100644 (file)
@@ -529,8 +529,8 @@ static int cache_defer_req(struct cache_req *req, struct cache_head *item)
        if (++cache_defer_cnt > DFR_MAX) {
                dreq = list_entry(cache_defer_list.prev,
                                  struct cache_deferred_req, recent);
        if (++cache_defer_cnt > DFR_MAX) {
                dreq = list_entry(cache_defer_list.prev,
                                  struct cache_deferred_req, recent);
-               list_del(&dreq->recent);
-               list_del(&dreq->hash);
+               list_del_init(&dreq->recent);
+               list_del_init(&dreq->hash);
                cache_defer_cnt--;
        }
        spin_unlock(&cache_defer_lock);
                cache_defer_cnt--;
        }
        spin_unlock(&cache_defer_lock);
@@ -564,7 +564,7 @@ static void cache_revisit_request(struct cache_head *item)
                        dreq = list_entry(lp, struct cache_deferred_req, hash);
                        lp = lp->next;
                        if (dreq->item == item) {
                        dreq = list_entry(lp, struct cache_deferred_req, hash);
                        lp = lp->next;
                        if (dreq->item == item) {
-                               list_del(&dreq->hash);
+                               list_del_init(&dreq->hash);
                                list_move(&dreq->recent, &pending);
                                cache_defer_cnt--;
                        }
                                list_move(&dreq->recent, &pending);
                                cache_defer_cnt--;
                        }
@@ -590,7 +590,7 @@ void cache_clean_deferred(void *owner)
 
        list_for_each_entry_safe(dreq, tmp, &cache_defer_list, recent) {
                if (dreq->owner == owner) {
 
        list_for_each_entry_safe(dreq, tmp, &cache_defer_list, recent) {
                if (dreq->owner == owner) {
-                       list_del(&dreq->hash);
+                       list_del_init(&dreq->hash);
                        list_move(&dreq->recent, &pending);
                        cache_defer_cnt--;
                }
                        list_move(&dreq->recent, &pending);
                        cache_defer_cnt--;
                }