From: "J. Bruce Fields" <bfields-uC3wQj2KruNg9hUCZPvPmw@public.gmane.org>
To: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn@public.gmane.org,
matthew-Ztpu424NOJ8@public.gmane.org,
dhowells-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
sage-4GqslpFJ+cxBDgjK7y7TUQ@public.gmane.org,
smfrench-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
swhiteho-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
Trond.Myklebust-HgOvQuBEEgTQT0dZR+AlfA@public.gmane.org,
akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-afs-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
ceph-devel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
samba-technical-w/Ol4Ecudpl8XjKLYN78aQ@public.gmane.org,
cluster-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
piastryyy-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
Subject: Re: [PATCH v1 08/11] locks: convert fl_link to a hlist_node
Date: Tue, 4 Jun 2013 17:59:50 -0400 [thread overview]
Message-ID: <20130604215950.GE15594@fieldses.org> (raw)
In-Reply-To: <1370056054-25449-9-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
On Fri, May 31, 2013 at 11:07:31PM -0400, Jeff Layton wrote:
> Testing has shown that iterating over the blocked_list for deadlock
> detection turns out to be a bottleneck. In order to alleviate that,
> begin the process of turning it into a hashtable. We start by turning
> the fl_link into a hlist_node and the global lists into hlists. A later
> patch will do the conversion of the blocked_list to a hashtable.
Even simpler would be if we could add a pointer to the (well, a) lock
that a lockowner is blocking on, and then we'd just have to follow a
pointer. I haven't thought that through, though, perhaps that's hard ot
make work....
--b.
>
> Signed-off-by: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> ---
> fs/locks.c | 32 ++++++++++++++++----------------
> include/linux/fs.h | 2 +-
> 2 files changed, 17 insertions(+), 17 deletions(-)
>
> diff --git a/fs/locks.c b/fs/locks.c
> index fc35b9e..5ed056b 100644
> --- a/fs/locks.c
> +++ b/fs/locks.c
> @@ -163,8 +163,8 @@ int lease_break_time = 45;
> #define for_each_lock(inode, lockp) \
> for (lockp = &inode->i_flock; *lockp != NULL; lockp = &(*lockp)->fl_next)
>
> -static LIST_HEAD(file_lock_list);
> -static LIST_HEAD(blocked_list);
> +static HLIST_HEAD(file_lock_list);
> +static HLIST_HEAD(blocked_list);
>
> /* Protects the two list heads above */
> static DEFINE_SPINLOCK(file_lock_lock);
> @@ -173,7 +173,7 @@ static struct kmem_cache *filelock_cache __read_mostly;
>
> static void locks_init_lock_heads(struct file_lock *fl)
> {
> - INIT_LIST_HEAD(&fl->fl_link);
> + INIT_HLIST_NODE(&fl->fl_link);
> INIT_LIST_HEAD(&fl->fl_block);
> init_waitqueue_head(&fl->fl_wait);
> }
> @@ -207,7 +207,7 @@ void locks_free_lock(struct file_lock *fl)
> {
> BUG_ON(waitqueue_active(&fl->fl_wait));
> BUG_ON(!list_empty(&fl->fl_block));
> - BUG_ON(!list_empty(&fl->fl_link));
> + BUG_ON(!hlist_unhashed(&fl->fl_link));
>
> locks_release_private(fl);
> kmem_cache_free(filelock_cache, fl);
> @@ -486,7 +486,7 @@ static inline void
> locks_insert_global_blocked(struct file_lock *waiter)
> {
> spin_lock(&file_lock_lock);
> - list_add(&waiter->fl_link, &blocked_list);
> + hlist_add_head(&waiter->fl_link, &blocked_list);
> spin_unlock(&file_lock_lock);
> }
>
> @@ -494,7 +494,7 @@ static inline void
> locks_delete_global_blocked(struct file_lock *waiter)
> {
> spin_lock(&file_lock_lock);
> - list_del_init(&waiter->fl_link);
> + hlist_del_init(&waiter->fl_link);
> spin_unlock(&file_lock_lock);
> }
>
> @@ -502,7 +502,7 @@ static inline void
> locks_insert_global_locks(struct file_lock *waiter)
> {
> spin_lock(&file_lock_lock);
> - list_add_tail(&waiter->fl_link, &file_lock_list);
> + hlist_add_head(&waiter->fl_link, &file_lock_list);
> spin_unlock(&file_lock_lock);
> }
>
> @@ -510,7 +510,7 @@ static inline void
> locks_delete_global_locks(struct file_lock *waiter)
> {
> spin_lock(&file_lock_lock);
> - list_del_init(&waiter->fl_link);
> + hlist_del_init(&waiter->fl_link);
> spin_unlock(&file_lock_lock);
> }
>
> @@ -705,7 +705,7 @@ static struct file_lock *what_owner_is_waiting_for(struct file_lock *block_fl)
> {
> struct file_lock *fl, *ret = NULL;
>
> - list_for_each_entry(fl, &blocked_list, fl_link) {
> + hlist_for_each_entry(fl, &blocked_list, fl_link) {
> if (posix_same_owner(fl, block_fl)) {
> ret = fl->fl_next;
> if (likely(ret))
> @@ -867,7 +867,7 @@ static int __posix_lock_file(struct inode *inode, struct file_lock *request, str
> goto out;
> error = FILE_LOCK_DEFERRED;
> locks_insert_block(fl, request);
> - if (list_empty(&request->fl_link))
> + if (hlist_unhashed(&request->fl_link))
> locks_insert_global_blocked(request);
> goto out;
> }
> @@ -882,10 +882,10 @@ static int __posix_lock_file(struct inode *inode, struct file_lock *request, str
> * Now that we know the request is no longer blocked, we can take it
> * off the global list. Some callers send down partially initialized
> * requests, so we only do this if FL_SLEEP is set. Also, avoid taking
> - * the lock if the list is empty, as that indicates a request that
> + * the lock if the hlist is unhashed, as that indicates a request that
> * never blocked.
> */
> - if ((request->fl_flags & FL_SLEEP) && !list_empty(&request->fl_link))
> + if ((request->fl_flags & FL_SLEEP) && !hlist_unhashed(&request->fl_link))
> locks_delete_global_blocked(request);
>
> /*
> @@ -2277,11 +2277,11 @@ static int locks_show(struct seq_file *f, void *v)
> {
> struct file_lock *fl, *bfl;
>
> - fl = list_entry(v, struct file_lock, fl_link);
> + fl = hlist_entry(v, struct file_lock, fl_link);
>
> lock_get_status(f, fl, *((loff_t *)f->private), "");
>
> - list_for_each_entry(bfl, &blocked_list, fl_link) {
> + hlist_for_each_entry(bfl, &blocked_list, fl_link) {
> if (bfl->fl_next == fl)
> lock_get_status(f, bfl, *((loff_t *)f->private), " ->");
> }
> @@ -2295,14 +2295,14 @@ static void *locks_start(struct seq_file *f, loff_t *pos)
>
> spin_lock(&file_lock_lock);
> *p = (*pos + 1);
> - return seq_list_start(&file_lock_list, *pos);
> + return seq_hlist_start(&file_lock_list, *pos);
> }
>
> static void *locks_next(struct seq_file *f, void *v, loff_t *pos)
> {
> loff_t *p = f->private;
> ++*p;
> - return seq_list_next(v, &file_lock_list, pos);
> + return seq_hlist_next(v, &file_lock_list, pos);
> }
>
> static void locks_stop(struct seq_file *f, void *v)
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index ccb44ea..07a009e 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -934,7 +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_link; /* doubly linked list of all locks */
> + struct hlist_node fl_link; /* node in global lists */
> struct list_head fl_block; /* circular list of blocked processes */
> fl_owner_t fl_owner;
> unsigned int fl_flags;
> --
> 1.7.1
>
WARNING: multiple messages have this Message-ID (diff)
From: J. Bruce Fields <bfields@fieldses.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH v1 08/11] locks: convert fl_link to a hlist_node
Date: Tue, 4 Jun 2013 17:59:50 -0400 [thread overview]
Message-ID: <20130604215950.GE15594@fieldses.org> (raw)
In-Reply-To: <1370056054-25449-9-git-send-email-jlayton@redhat.com>
On Fri, May 31, 2013 at 11:07:31PM -0400, Jeff Layton wrote:
> Testing has shown that iterating over the blocked_list for deadlock
> detection turns out to be a bottleneck. In order to alleviate that,
> begin the process of turning it into a hashtable. We start by turning
> the fl_link into a hlist_node and the global lists into hlists. A later
> patch will do the conversion of the blocked_list to a hashtable.
Even simpler would be if we could add a pointer to the (well, a) lock
that a lockowner is blocking on, and then we'd just have to follow a
pointer. I haven't thought that through, though, perhaps that's hard ot
make work....
--b.
>
> Signed-off-by: Jeff Layton <jlayton@redhat.com>
> ---
> fs/locks.c | 32 ++++++++++++++++----------------
> include/linux/fs.h | 2 +-
> 2 files changed, 17 insertions(+), 17 deletions(-)
>
> diff --git a/fs/locks.c b/fs/locks.c
> index fc35b9e..5ed056b 100644
> --- a/fs/locks.c
> +++ b/fs/locks.c
> @@ -163,8 +163,8 @@ int lease_break_time = 45;
> #define for_each_lock(inode, lockp) \
> for (lockp = &inode->i_flock; *lockp != NULL; lockp = &(*lockp)->fl_next)
>
> -static LIST_HEAD(file_lock_list);
> -static LIST_HEAD(blocked_list);
> +static HLIST_HEAD(file_lock_list);
> +static HLIST_HEAD(blocked_list);
>
> /* Protects the two list heads above */
> static DEFINE_SPINLOCK(file_lock_lock);
> @@ -173,7 +173,7 @@ static struct kmem_cache *filelock_cache __read_mostly;
>
> static void locks_init_lock_heads(struct file_lock *fl)
> {
> - INIT_LIST_HEAD(&fl->fl_link);
> + INIT_HLIST_NODE(&fl->fl_link);
> INIT_LIST_HEAD(&fl->fl_block);
> init_waitqueue_head(&fl->fl_wait);
> }
> @@ -207,7 +207,7 @@ void locks_free_lock(struct file_lock *fl)
> {
> BUG_ON(waitqueue_active(&fl->fl_wait));
> BUG_ON(!list_empty(&fl->fl_block));
> - BUG_ON(!list_empty(&fl->fl_link));
> + BUG_ON(!hlist_unhashed(&fl->fl_link));
>
> locks_release_private(fl);
> kmem_cache_free(filelock_cache, fl);
> @@ -486,7 +486,7 @@ static inline void
> locks_insert_global_blocked(struct file_lock *waiter)
> {
> spin_lock(&file_lock_lock);
> - list_add(&waiter->fl_link, &blocked_list);
> + hlist_add_head(&waiter->fl_link, &blocked_list);
> spin_unlock(&file_lock_lock);
> }
>
> @@ -494,7 +494,7 @@ static inline void
> locks_delete_global_blocked(struct file_lock *waiter)
> {
> spin_lock(&file_lock_lock);
> - list_del_init(&waiter->fl_link);
> + hlist_del_init(&waiter->fl_link);
> spin_unlock(&file_lock_lock);
> }
>
> @@ -502,7 +502,7 @@ static inline void
> locks_insert_global_locks(struct file_lock *waiter)
> {
> spin_lock(&file_lock_lock);
> - list_add_tail(&waiter->fl_link, &file_lock_list);
> + hlist_add_head(&waiter->fl_link, &file_lock_list);
> spin_unlock(&file_lock_lock);
> }
>
> @@ -510,7 +510,7 @@ static inline void
> locks_delete_global_locks(struct file_lock *waiter)
> {
> spin_lock(&file_lock_lock);
> - list_del_init(&waiter->fl_link);
> + hlist_del_init(&waiter->fl_link);
> spin_unlock(&file_lock_lock);
> }
>
> @@ -705,7 +705,7 @@ static struct file_lock *what_owner_is_waiting_for(struct file_lock *block_fl)
> {
> struct file_lock *fl, *ret = NULL;
>
> - list_for_each_entry(fl, &blocked_list, fl_link) {
> + hlist_for_each_entry(fl, &blocked_list, fl_link) {
> if (posix_same_owner(fl, block_fl)) {
> ret = fl->fl_next;
> if (likely(ret))
> @@ -867,7 +867,7 @@ static int __posix_lock_file(struct inode *inode, struct file_lock *request, str
> goto out;
> error = FILE_LOCK_DEFERRED;
> locks_insert_block(fl, request);
> - if (list_empty(&request->fl_link))
> + if (hlist_unhashed(&request->fl_link))
> locks_insert_global_blocked(request);
> goto out;
> }
> @@ -882,10 +882,10 @@ static int __posix_lock_file(struct inode *inode, struct file_lock *request, str
> * Now that we know the request is no longer blocked, we can take it
> * off the global list. Some callers send down partially initialized
> * requests, so we only do this if FL_SLEEP is set. Also, avoid taking
> - * the lock if the list is empty, as that indicates a request that
> + * the lock if the hlist is unhashed, as that indicates a request that
> * never blocked.
> */
> - if ((request->fl_flags & FL_SLEEP) && !list_empty(&request->fl_link))
> + if ((request->fl_flags & FL_SLEEP) && !hlist_unhashed(&request->fl_link))
> locks_delete_global_blocked(request);
>
> /*
> @@ -2277,11 +2277,11 @@ static int locks_show(struct seq_file *f, void *v)
> {
> struct file_lock *fl, *bfl;
>
> - fl = list_entry(v, struct file_lock, fl_link);
> + fl = hlist_entry(v, struct file_lock, fl_link);
>
> lock_get_status(f, fl, *((loff_t *)f->private), "");
>
> - list_for_each_entry(bfl, &blocked_list, fl_link) {
> + hlist_for_each_entry(bfl, &blocked_list, fl_link) {
> if (bfl->fl_next == fl)
> lock_get_status(f, bfl, *((loff_t *)f->private), " ->");
> }
> @@ -2295,14 +2295,14 @@ static void *locks_start(struct seq_file *f, loff_t *pos)
>
> spin_lock(&file_lock_lock);
> *p = (*pos + 1);
> - return seq_list_start(&file_lock_list, *pos);
> + return seq_hlist_start(&file_lock_list, *pos);
> }
>
> static void *locks_next(struct seq_file *f, void *v, loff_t *pos)
> {
> loff_t *p = f->private;
> ++*p;
> - return seq_list_next(v, &file_lock_list, pos);
> + return seq_hlist_next(v, &file_lock_list, pos);
> }
>
> static void locks_stop(struct seq_file *f, void *v)
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index ccb44ea..07a009e 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -934,7 +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_link; /* doubly linked list of all locks */
> + struct hlist_node fl_link; /* node in global lists */
> struct list_head fl_block; /* circular list of blocked processes */
> fl_owner_t fl_owner;
> unsigned int fl_flags;
> --
> 1.7.1
>
WARNING: multiple messages have this Message-ID (diff)
From: "J. Bruce Fields" <bfields@fieldses.org>
To: Jeff Layton <jlayton@redhat.com>
Cc: viro@zeniv.linux.org.uk, matthew@wil.cx, dhowells@redhat.com,
sage@inktank.com, smfrench@gmail.com, swhiteho@redhat.com,
Trond.Myklebust@netapp.com, akpm@linux-foundation.org,
linux-kernel@vger.kernel.org, linux-afs@lists.infradead.org,
ceph-devel@vger.kernel.org, linux-cifs@vger.kernel.org,
samba-technical@lists.samba.org, cluster-devel@redhat.com,
linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
piastryyy@gmail.com
Subject: Re: [PATCH v1 08/11] locks: convert fl_link to a hlist_node
Date: Tue, 4 Jun 2013 17:59:50 -0400 [thread overview]
Message-ID: <20130604215950.GE15594@fieldses.org> (raw)
In-Reply-To: <1370056054-25449-9-git-send-email-jlayton@redhat.com>
On Fri, May 31, 2013 at 11:07:31PM -0400, Jeff Layton wrote:
> Testing has shown that iterating over the blocked_list for deadlock
> detection turns out to be a bottleneck. In order to alleviate that,
> begin the process of turning it into a hashtable. We start by turning
> the fl_link into a hlist_node and the global lists into hlists. A later
> patch will do the conversion of the blocked_list to a hashtable.
Even simpler would be if we could add a pointer to the (well, a) lock
that a lockowner is blocking on, and then we'd just have to follow a
pointer. I haven't thought that through, though, perhaps that's hard ot
make work....
--b.
>
> Signed-off-by: Jeff Layton <jlayton@redhat.com>
> ---
> fs/locks.c | 32 ++++++++++++++++----------------
> include/linux/fs.h | 2 +-
> 2 files changed, 17 insertions(+), 17 deletions(-)
>
> diff --git a/fs/locks.c b/fs/locks.c
> index fc35b9e..5ed056b 100644
> --- a/fs/locks.c
> +++ b/fs/locks.c
> @@ -163,8 +163,8 @@ int lease_break_time = 45;
> #define for_each_lock(inode, lockp) \
> for (lockp = &inode->i_flock; *lockp != NULL; lockp = &(*lockp)->fl_next)
>
> -static LIST_HEAD(file_lock_list);
> -static LIST_HEAD(blocked_list);
> +static HLIST_HEAD(file_lock_list);
> +static HLIST_HEAD(blocked_list);
>
> /* Protects the two list heads above */
> static DEFINE_SPINLOCK(file_lock_lock);
> @@ -173,7 +173,7 @@ static struct kmem_cache *filelock_cache __read_mostly;
>
> static void locks_init_lock_heads(struct file_lock *fl)
> {
> - INIT_LIST_HEAD(&fl->fl_link);
> + INIT_HLIST_NODE(&fl->fl_link);
> INIT_LIST_HEAD(&fl->fl_block);
> init_waitqueue_head(&fl->fl_wait);
> }
> @@ -207,7 +207,7 @@ void locks_free_lock(struct file_lock *fl)
> {
> BUG_ON(waitqueue_active(&fl->fl_wait));
> BUG_ON(!list_empty(&fl->fl_block));
> - BUG_ON(!list_empty(&fl->fl_link));
> + BUG_ON(!hlist_unhashed(&fl->fl_link));
>
> locks_release_private(fl);
> kmem_cache_free(filelock_cache, fl);
> @@ -486,7 +486,7 @@ static inline void
> locks_insert_global_blocked(struct file_lock *waiter)
> {
> spin_lock(&file_lock_lock);
> - list_add(&waiter->fl_link, &blocked_list);
> + hlist_add_head(&waiter->fl_link, &blocked_list);
> spin_unlock(&file_lock_lock);
> }
>
> @@ -494,7 +494,7 @@ static inline void
> locks_delete_global_blocked(struct file_lock *waiter)
> {
> spin_lock(&file_lock_lock);
> - list_del_init(&waiter->fl_link);
> + hlist_del_init(&waiter->fl_link);
> spin_unlock(&file_lock_lock);
> }
>
> @@ -502,7 +502,7 @@ static inline void
> locks_insert_global_locks(struct file_lock *waiter)
> {
> spin_lock(&file_lock_lock);
> - list_add_tail(&waiter->fl_link, &file_lock_list);
> + hlist_add_head(&waiter->fl_link, &file_lock_list);
> spin_unlock(&file_lock_lock);
> }
>
> @@ -510,7 +510,7 @@ static inline void
> locks_delete_global_locks(struct file_lock *waiter)
> {
> spin_lock(&file_lock_lock);
> - list_del_init(&waiter->fl_link);
> + hlist_del_init(&waiter->fl_link);
> spin_unlock(&file_lock_lock);
> }
>
> @@ -705,7 +705,7 @@ static struct file_lock *what_owner_is_waiting_for(struct file_lock *block_fl)
> {
> struct file_lock *fl, *ret = NULL;
>
> - list_for_each_entry(fl, &blocked_list, fl_link) {
> + hlist_for_each_entry(fl, &blocked_list, fl_link) {
> if (posix_same_owner(fl, block_fl)) {
> ret = fl->fl_next;
> if (likely(ret))
> @@ -867,7 +867,7 @@ static int __posix_lock_file(struct inode *inode, struct file_lock *request, str
> goto out;
> error = FILE_LOCK_DEFERRED;
> locks_insert_block(fl, request);
> - if (list_empty(&request->fl_link))
> + if (hlist_unhashed(&request->fl_link))
> locks_insert_global_blocked(request);
> goto out;
> }
> @@ -882,10 +882,10 @@ static int __posix_lock_file(struct inode *inode, struct file_lock *request, str
> * Now that we know the request is no longer blocked, we can take it
> * off the global list. Some callers send down partially initialized
> * requests, so we only do this if FL_SLEEP is set. Also, avoid taking
> - * the lock if the list is empty, as that indicates a request that
> + * the lock if the hlist is unhashed, as that indicates a request that
> * never blocked.
> */
> - if ((request->fl_flags & FL_SLEEP) && !list_empty(&request->fl_link))
> + if ((request->fl_flags & FL_SLEEP) && !hlist_unhashed(&request->fl_link))
> locks_delete_global_blocked(request);
>
> /*
> @@ -2277,11 +2277,11 @@ static int locks_show(struct seq_file *f, void *v)
> {
> struct file_lock *fl, *bfl;
>
> - fl = list_entry(v, struct file_lock, fl_link);
> + fl = hlist_entry(v, struct file_lock, fl_link);
>
> lock_get_status(f, fl, *((loff_t *)f->private), "");
>
> - list_for_each_entry(bfl, &blocked_list, fl_link) {
> + hlist_for_each_entry(bfl, &blocked_list, fl_link) {
> if (bfl->fl_next == fl)
> lock_get_status(f, bfl, *((loff_t *)f->private), " ->");
> }
> @@ -2295,14 +2295,14 @@ static void *locks_start(struct seq_file *f, loff_t *pos)
>
> spin_lock(&file_lock_lock);
> *p = (*pos + 1);
> - return seq_list_start(&file_lock_list, *pos);
> + return seq_hlist_start(&file_lock_list, *pos);
> }
>
> static void *locks_next(struct seq_file *f, void *v, loff_t *pos)
> {
> loff_t *p = f->private;
> ++*p;
> - return seq_list_next(v, &file_lock_list, pos);
> + return seq_hlist_next(v, &file_lock_list, pos);
> }
>
> static void locks_stop(struct seq_file *f, void *v)
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index ccb44ea..07a009e 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -934,7 +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_link; /* doubly linked list of all locks */
> + struct hlist_node fl_link; /* node in global lists */
> struct list_head fl_block; /* circular list of blocked processes */
> fl_owner_t fl_owner;
> unsigned int fl_flags;
> --
> 1.7.1
>
next prev parent reply other threads:[~2013-06-04 21:59 UTC|newest]
Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-01 3:07 [PATCH v1 00/11] locks: scalability improvements for file locking Jeff Layton
2013-06-01 3:07 ` Jeff Layton
2013-06-01 3:07 ` [Cluster-devel] " Jeff Layton
2013-06-01 3:07 ` [PATCH v1 01/11] cifs: use posix_unblock_lock instead of locks_delete_block Jeff Layton
2013-06-01 3:07 ` [Cluster-devel] " Jeff Layton
[not found] ` <1370056054-25449-2-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-06-03 21:53 ` J. Bruce Fields
2013-06-03 21:53 ` J. Bruce Fields
2013-06-03 21:53 ` [Cluster-devel] " J. Bruce Fields
2013-06-01 3:07 ` [PATCH v1 02/11] locks: make generic_add_lease and generic_delete_lease static Jeff Layton
2013-06-01 3:07 ` [Cluster-devel] " Jeff Layton
[not found] ` <1370056054-25449-3-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-06-03 21:53 ` J. Bruce Fields
2013-06-03 21:53 ` J. Bruce Fields
2013-06-03 21:53 ` [Cluster-devel] " J. Bruce Fields
2013-06-01 3:07 ` [PATCH v1 04/11] locks: make "added" in __posix_lock_file a bool Jeff Layton
2013-06-01 3:07 ` [Cluster-devel] " Jeff Layton
2013-06-04 20:17 ` J. Bruce Fields
2013-06-04 20:17 ` [Cluster-devel] " J. Bruce Fields
2013-06-01 3:07 ` [PATCH v1 05/11] locks: encapsulate the fl_link list handling Jeff Layton
2013-06-01 3:07 ` [Cluster-devel] " Jeff Layton
2013-06-04 20:17 ` J. Bruce Fields
2013-06-04 20:17 ` [Cluster-devel] " J. Bruce Fields
[not found] ` <1370056054-25449-1-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-06-01 3:07 ` [PATCH v1 03/11] locks: comment cleanups and clarifications Jeff Layton
2013-06-01 3:07 ` Jeff Layton
2013-06-01 3:07 ` [Cluster-devel] " Jeff Layton
[not found] ` <1370056054-25449-4-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-06-03 22:00 ` J. Bruce Fields
2013-06-03 22:00 ` J. Bruce Fields
2013-06-03 22:00 ` [Cluster-devel] " J. Bruce Fields
[not found] ` <20130603220024.GF2109-uC3wQj2KruNg9hUCZPvPmw@public.gmane.org>
2013-06-04 11:09 ` Jeff Layton
2013-06-04 11:09 ` Jeff Layton
2013-06-04 11:09 ` [Cluster-devel] " Jeff Layton
2013-06-01 3:07 ` [PATCH v1 06/11] locks: convert to i_lock to protect i_flock list Jeff Layton
2013-06-01 3:07 ` Jeff Layton
2013-06-01 3:07 ` [Cluster-devel] " Jeff Layton
2013-06-04 21:22 ` J. Bruce Fields
2013-06-04 21:22 ` [Cluster-devel] " J. Bruce Fields
[not found] ` <20130604212208.GC15594-uC3wQj2KruNg9hUCZPvPmw@public.gmane.org>
2013-06-05 0:46 ` Jeff Layton
2013-06-05 0:46 ` Jeff Layton
2013-06-05 0:46 ` [Cluster-devel] " Jeff Layton
2013-06-01 3:07 ` [PATCH v1 09/11] locks: turn the blocked_list into a hashtable Jeff Layton
2013-06-01 3:07 ` Jeff Layton
2013-06-01 3:07 ` [Cluster-devel] " Jeff Layton
2013-06-01 3:07 ` [PATCH v1 10/11] locks: add a new "lm_owner_key" lock operation Jeff Layton
2013-06-01 3:07 ` Jeff Layton
2013-06-01 3:07 ` [Cluster-devel] " Jeff Layton
2013-06-01 3:07 ` [PATCH v1 11/11] locks: give the blocked_hash its own spinlock Jeff Layton
2013-06-01 3:07 ` Jeff Layton
2013-06-01 3:07 ` [Cluster-devel] " Jeff Layton
[not found] ` <1370056054-25449-12-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-06-04 14:19 ` Stefan (metze) Metzmacher
2013-06-04 14:19 ` Stefan (metze) Metzmacher
2013-06-04 14:19 ` [Cluster-devel] " Stefan Metzmacher
2013-06-04 14:39 ` Jeff Layton
2013-06-04 14:39 ` [Cluster-devel] " Jeff Layton
2013-06-04 14:46 ` Christoph Hellwig
2013-06-04 14:46 ` [Cluster-devel] " Christoph Hellwig
[not found] ` <20130604144640.GA7730-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2013-06-04 14:53 ` J. Bruce Fields
2013-06-04 14:53 ` J. Bruce Fields
2013-06-04 14:53 ` [Cluster-devel] " J. Bruce Fields
2013-06-04 15:15 ` Jeff Layton
2013-06-04 15:15 ` [Cluster-devel] " Jeff Layton
2013-06-04 14:56 ` Jeff Layton
2013-06-04 14:56 ` Jeff Layton
2013-06-04 14:56 ` [Cluster-devel] " Jeff Layton
2013-06-03 19:04 ` [PATCH v1 00/11] locks: scalability improvements for file locking Davidlohr Bueso
2013-06-03 19:04 ` Davidlohr Bueso
2013-06-03 19:04 ` [Cluster-devel] " Davidlohr Bueso
2013-06-03 21:31 ` J. Bruce Fields
2013-06-03 21:31 ` J. Bruce Fields
2013-06-03 21:31 ` [Cluster-devel] " J. Bruce Fields
2013-06-04 10:54 ` Jeff Layton
2013-06-04 10:54 ` [Cluster-devel] " Jeff Layton
[not found] ` <20130604065417.46080a57-9yPaYZwiELC+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2013-06-04 11:56 ` Jim Rees
2013-06-04 11:56 ` Jim Rees
2013-06-04 11:56 ` [Cluster-devel] " Jim Rees
[not found] ` <20130604115644.GA4180-63aXycvo3TyHXe+LvDLADg@public.gmane.org>
2013-06-04 12:15 ` Jeff Layton
2013-06-04 12:15 ` Jeff Layton
2013-06-04 12:15 ` [Cluster-devel] " Jeff Layton
2013-06-01 3:07 ` [PATCH v1 07/11] locks: only pull entries off of blocked_list when they are really unblocked Jeff Layton
2013-06-01 3:07 ` Jeff Layton
2013-06-01 3:07 ` [Cluster-devel] " Jeff Layton
[not found] ` <1370056054-25449-8-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-06-04 21:58 ` J. Bruce Fields
2013-06-04 21:58 ` J. Bruce Fields
2013-06-04 21:58 ` [Cluster-devel] " J. Bruce Fields
[not found] ` <20130604215839.GD15594-uC3wQj2KruNg9hUCZPvPmw@public.gmane.org>
2013-06-05 11:38 ` Jeff Layton
2013-06-05 11:38 ` Jeff Layton
2013-06-05 11:38 ` [Cluster-devel] " Jeff Layton
[not found] ` <20130605073822.4d67c57c-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2013-06-05 12:24 ` J. Bruce Fields
2013-06-05 12:24 ` J. Bruce Fields
2013-06-05 12:24 ` [Cluster-devel] " J. Bruce Fields
2013-06-05 12:38 ` Jeff Layton
2013-06-05 12:38 ` [Cluster-devel] " Jeff Layton
[not found] ` <20130605083859.72c855cd-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2013-06-05 12:59 ` J. Bruce Fields
2013-06-05 12:59 ` J. Bruce Fields
2013-06-05 12:59 ` [Cluster-devel] " J. Bruce Fields
2013-06-01 3:07 ` [PATCH v1 08/11] locks: convert fl_link to a hlist_node Jeff Layton
2013-06-01 3:07 ` [Cluster-devel] " Jeff Layton
[not found] ` <1370056054-25449-9-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-06-04 21:59 ` J. Bruce Fields [this message]
2013-06-04 21:59 ` J. Bruce Fields
2013-06-04 21:59 ` [Cluster-devel] " J. Bruce Fields
2013-06-05 11:43 ` Jeff Layton
2013-06-05 11:43 ` [Cluster-devel] " Jeff Layton
[not found] ` <20130605074309.051ff75f-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2013-06-05 12:46 ` J. Bruce Fields
2013-06-05 12:46 ` J. Bruce Fields
2013-06-05 12:46 ` [Cluster-devel] " J. Bruce Fields
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130604215950.GE15594@fieldses.org \
--to=bfields-uc3wqj2krung9huczpvpmw@public.gmane.org \
--cc=Trond.Myklebust-HgOvQuBEEgTQT0dZR+AlfA@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=ceph-devel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=cluster-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=dhowells-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=linux-afs-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=matthew-Ztpu424NOJ8@public.gmane.org \
--cc=piastryyy-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=sage-4GqslpFJ+cxBDgjK7y7TUQ@public.gmane.org \
--cc=samba-technical-w/Ol4Ecudpl8XjKLYN78aQ@public.gmane.org \
--cc=smfrench-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=swhiteho-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.