locks: add new struct list_head to struct file_lock
authorJeff Layton <jlayton@primarydata.com>
Fri, 16 Jan 2015 20:05:54 +0000 (15:05 -0500)
committerJeff Layton <jlayton@primarydata.com>
Fri, 16 Jan 2015 20:05:54 +0000 (15:05 -0500)
...that we can use to queue file_locks to per-ctx list_heads. Go ahead
and convert locks_delete_lock and locks_dispose_list to use it instead
of the fl_block list.

Signed-off-by: Jeff Layton <jlayton@primarydata.com>
Acked-by: Christoph Hellwig <hch@lst.de>
fs/locks.c
include/linux/fs.h

index 59e2f905e4ffea324dbf44faf1b666974adc6c23..bfe5f17401dec6d970654d367863880948287567 100644 (file)
@@ -207,6 +207,7 @@ static struct kmem_cache *filelock_cache __read_mostly;
 static void locks_init_lock_heads(struct file_lock *fl)
 {
        INIT_HLIST_NODE(&fl->fl_link);
+       INIT_LIST_HEAD(&fl->fl_list);
        INIT_LIST_HEAD(&fl->fl_block);
        init_waitqueue_head(&fl->fl_wait);
 }
@@ -243,6 +244,7 @@ EXPORT_SYMBOL_GPL(locks_release_private);
 void locks_free_lock(struct file_lock *fl)
 {
        BUG_ON(waitqueue_active(&fl->fl_wait));
+       BUG_ON(!list_empty(&fl->fl_list));
        BUG_ON(!list_empty(&fl->fl_block));
        BUG_ON(!hlist_unhashed(&fl->fl_link));
 
@@ -257,8 +259,8 @@ locks_dispose_list(struct list_head *dispose)
        struct file_lock *fl;
 
        while (!list_empty(dispose)) {
-               fl = list_first_entry(dispose, struct file_lock, fl_block);
-               list_del_init(&fl->fl_block);
+               fl = list_first_entry(dispose, struct file_lock, fl_list);
+               list_del_init(&fl->fl_list);
                locks_free_lock(fl);
        }
 }
@@ -691,7 +693,7 @@ static void locks_delete_lock(struct file_lock **thisfl_p,
 
        locks_unlink_lock(thisfl_p);
        if (dispose)
-               list_add(&fl->fl_block, dispose);
+               list_add(&fl->fl_list, dispose);
        else
                locks_free_lock(fl);
 }
index 42efe13077b6c1b8dd139c6cea7a241e5d6b320d..cd6818115162eee676d55d0ee625611cc3d4e868 100644 (file)
@@ -934,6 +934,7 @@ int locks_in_grace(struct net *);
  */
 struct file_lock {
        struct file_lock *fl_next;      /* singly linked list for this inode  */
+       struct list_head fl_list;       /* link into file_lock_context */
        struct hlist_node fl_link;      /* node in global lists */
        struct list_head fl_block;      /* circular list of blocked processes */
        fl_owner_t fl_owner;