All of lore.kernel.org
 help / color / mirror / Atom feed
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 v2 11/14] locks: add a new "lm_owner_key" lock operation
Date: Thu, 13 Jun 2013 11:00:33 -0400	[thread overview]
Message-ID: <20130613150033.GA20666@fieldses.org> (raw)
In-Reply-To: <1370948948-31784-12-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>

On Tue, Jun 11, 2013 at 07:09:05AM -0400, Jeff Layton wrote:
> Currently, the hashing that the locking code uses to add these values
> to the blocked_hash is simply calculated using fl_owner field. That's
> valid in most cases except for server-side lockd, which validates the
> owner of a lock based on fl_owner and fl_pid.
> 
> In the case where you have a small number of NFS clients doing a lot
> of locking between different processes, you could end up with all
> the blocked requests sitting in a very small number of hash buckets.
> 
> Add a new lm_owner_key operation to the lock_manager_operations that
> will generate an unsigned long to use as the key in the hashtable.
> That function is only implemented for server-side lockd, and simply
> XORs the fl_owner and fl_pid.

Like I've said I think we should look into defining a lock_owner struct
that lockd can allocate as necessary so that the lock code can just do a
pointer comparison on struct lock_owner *'s.  But maybe that doesn't
work out and in any case it can be future work, so looks fine, ACK.

--b.

> 
> Signed-off-by: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> ---
>  Documentation/filesystems/Locking |   18 +++++++++++-------
>  fs/lockd/svclock.c                |   12 ++++++++++++
>  fs/locks.c                        |   12 ++++++++++--
>  include/linux/fs.h                |    1 +
>  4 files changed, 34 insertions(+), 9 deletions(-)
> 
> diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking
> index 13f91ab..ee351ac 100644
> --- a/Documentation/filesystems/Locking
> +++ b/Documentation/filesystems/Locking
> @@ -351,6 +351,7 @@ fl_release_private:	maybe		no
>  ----------------------- lock_manager_operations ---------------------------
>  prototypes:
>  	int (*lm_compare_owner)(struct file_lock *, struct file_lock *);
> +	unsigned long (*lm_owner_key)(struct file_lock *);
>  	void (*lm_notify)(struct file_lock *);  /* unblock callback */
>  	int (*lm_grant)(struct file_lock *, struct file_lock *, int);
>  	void (*lm_break)(struct file_lock *); /* break_lease callback */
> @@ -360,18 +361,21 @@ locking rules:
>  
>  			inode->i_lock	file_lock_lock	may block
>  lm_compare_owner:	yes		maybe		no
> +lm_owner_key		yes		yes		no
>  lm_notify:		yes		no		no
>  lm_grant:		no		no		no
>  lm_break:		yes		no		no
>  lm_change		yes		no		no
>  
> -	->lm_compare_owner is generally called with *an* inode->i_lock
> -held. It may not be the i_lock of the inode for either file_lock being
> -compared! This is the case with deadlock detection, since the code has
> -to chase down the owners of locks that may be entirely unrelated to the
> -one on which the lock is being acquired. For deadlock detection however,
> -the file_lock_lock is also held. The locks primarily ensure that neither
> -file_lock disappear out from under you while doing the comparison.
> +	->lm_compare_owner and ->lm_owner_key are generally called with
> +*an* inode->i_lock held. It may not be the i_lock of the inode
> +associated with either file_lock argument! This is the case with deadlock
> +detection, since the code has to chase down the owners of locks that may
> +be entirely unrelated to the one on which the lock is being acquired.
> +For deadlock detection however, the file_lock_lock is also held. The
> +fact that these locks are held ensures that the file_locks do not
> +disappear out from under you while doing the comparison or generating an
> +owner key.
>  
>  --------------------------- buffer_head -----------------------------------
>  prototypes:
> diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c
> index e703318..ce2cdab 100644
> --- a/fs/lockd/svclock.c
> +++ b/fs/lockd/svclock.c
> @@ -744,8 +744,20 @@ static int nlmsvc_same_owner(struct file_lock *fl1, struct file_lock *fl2)
>  	return fl1->fl_owner == fl2->fl_owner && fl1->fl_pid == fl2->fl_pid;
>  }
>  
> +/*
> + * Since NLM uses two "keys" for tracking locks, we need to hash them down
> + * to one for the blocked_hash. Here, we're just xor'ing the host address
> + * with the pid in order to create a key value for picking a hash bucket.
> + */
> +static unsigned long
> +nlmsvc_owner_key(struct file_lock *fl)
> +{
> +	return (unsigned long)fl->fl_owner ^ (unsigned long)fl->fl_pid;
> +}
> +
>  const struct lock_manager_operations nlmsvc_lock_operations = {
>  	.lm_compare_owner = nlmsvc_same_owner,
> +	.lm_owner_key = nlmsvc_owner_key,
>  	.lm_notify = nlmsvc_notify_blocked,
>  	.lm_grant = nlmsvc_grant_deferred,
>  };
> diff --git a/fs/locks.c b/fs/locks.c
> index 76fb7af..11e7784 100644
> --- a/fs/locks.c
> +++ b/fs/locks.c
> @@ -481,11 +481,19 @@ static int posix_same_owner(struct file_lock *fl1, struct file_lock *fl2)
>  	return fl1->fl_owner == fl2->fl_owner;
>  }
>  
> +static unsigned long
> +posix_owner_key(struct file_lock *fl)
> +{
> +	if (fl->fl_lmops && fl->fl_lmops->lm_owner_key)
> +		return fl->fl_lmops->lm_owner_key(fl);
> +	return (unsigned long)fl->fl_owner;
> +}
> +
>  /* Remove a blocker or lock from one of the global lists */
>  static inline void
>  locks_insert_global_blocked(struct file_lock *waiter)
>  {
> -	hash_add(blocked_hash, &waiter->fl_link, (unsigned long)waiter->fl_owner);
> +	hash_add(blocked_hash, &waiter->fl_link, posix_owner_key(waiter));
>  }
>  
>  static inline void
> @@ -739,7 +747,7 @@ static struct file_lock *what_owner_is_waiting_for(struct file_lock *block_fl)
>  {
>  	struct file_lock *fl;
>  
> -	hash_for_each_possible(blocked_hash, fl, fl_link, (unsigned long)block_fl->fl_owner) {
> +	hash_for_each_possible(blocked_hash, fl, fl_link, posix_owner_key(block_fl)) {
>  		if (posix_same_owner(fl, block_fl))
>  			return fl->fl_next;
>  	}
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 3b340f7..232a345 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -908,6 +908,7 @@ struct file_lock_operations {
>  
>  struct lock_manager_operations {
>  	int (*lm_compare_owner)(struct file_lock *, struct file_lock *);
> +	unsigned long (*lm_owner_key)(struct file_lock *);
>  	void (*lm_notify)(struct file_lock *);	/* unblock callback */
>  	int (*lm_grant)(struct file_lock *, struct file_lock *, int);
>  	void (*lm_break)(struct file_lock *);
> -- 
> 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 v2 11/14] locks: add a new "lm_owner_key" lock operation
Date: Thu, 13 Jun 2013 11:00:33 -0400	[thread overview]
Message-ID: <20130613150033.GA20666@fieldses.org> (raw)
In-Reply-To: <1370948948-31784-12-git-send-email-jlayton@redhat.com>

On Tue, Jun 11, 2013 at 07:09:05AM -0400, Jeff Layton wrote:
> Currently, the hashing that the locking code uses to add these values
> to the blocked_hash is simply calculated using fl_owner field. That's
> valid in most cases except for server-side lockd, which validates the
> owner of a lock based on fl_owner and fl_pid.
> 
> In the case where you have a small number of NFS clients doing a lot
> of locking between different processes, you could end up with all
> the blocked requests sitting in a very small number of hash buckets.
> 
> Add a new lm_owner_key operation to the lock_manager_operations that
> will generate an unsigned long to use as the key in the hashtable.
> That function is only implemented for server-side lockd, and simply
> XORs the fl_owner and fl_pid.

Like I've said I think we should look into defining a lock_owner struct
that lockd can allocate as necessary so that the lock code can just do a
pointer comparison on struct lock_owner *'s.  But maybe that doesn't
work out and in any case it can be future work, so looks fine, ACK.

--b.

> 
> Signed-off-by: Jeff Layton <jlayton@redhat.com>
> ---
>  Documentation/filesystems/Locking |   18 +++++++++++-------
>  fs/lockd/svclock.c                |   12 ++++++++++++
>  fs/locks.c                        |   12 ++++++++++--
>  include/linux/fs.h                |    1 +
>  4 files changed, 34 insertions(+), 9 deletions(-)
> 
> diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking
> index 13f91ab..ee351ac 100644
> --- a/Documentation/filesystems/Locking
> +++ b/Documentation/filesystems/Locking
> @@ -351,6 +351,7 @@ fl_release_private:	maybe		no
>  ----------------------- lock_manager_operations ---------------------------
>  prototypes:
>  	int (*lm_compare_owner)(struct file_lock *, struct file_lock *);
> +	unsigned long (*lm_owner_key)(struct file_lock *);
>  	void (*lm_notify)(struct file_lock *);  /* unblock callback */
>  	int (*lm_grant)(struct file_lock *, struct file_lock *, int);
>  	void (*lm_break)(struct file_lock *); /* break_lease callback */
> @@ -360,18 +361,21 @@ locking rules:
>  
>  			inode->i_lock	file_lock_lock	may block
>  lm_compare_owner:	yes		maybe		no
> +lm_owner_key		yes		yes		no
>  lm_notify:		yes		no		no
>  lm_grant:		no		no		no
>  lm_break:		yes		no		no
>  lm_change		yes		no		no
>  
> -	->lm_compare_owner is generally called with *an* inode->i_lock
> -held. It may not be the i_lock of the inode for either file_lock being
> -compared! This is the case with deadlock detection, since the code has
> -to chase down the owners of locks that may be entirely unrelated to the
> -one on which the lock is being acquired. For deadlock detection however,
> -the file_lock_lock is also held. The locks primarily ensure that neither
> -file_lock disappear out from under you while doing the comparison.
> +	->lm_compare_owner and ->lm_owner_key are generally called with
> +*an* inode->i_lock held. It may not be the i_lock of the inode
> +associated with either file_lock argument! This is the case with deadlock
> +detection, since the code has to chase down the owners of locks that may
> +be entirely unrelated to the one on which the lock is being acquired.
> +For deadlock detection however, the file_lock_lock is also held. The
> +fact that these locks are held ensures that the file_locks do not
> +disappear out from under you while doing the comparison or generating an
> +owner key.
>  
>  --------------------------- buffer_head -----------------------------------
>  prototypes:
> diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c
> index e703318..ce2cdab 100644
> --- a/fs/lockd/svclock.c
> +++ b/fs/lockd/svclock.c
> @@ -744,8 +744,20 @@ static int nlmsvc_same_owner(struct file_lock *fl1, struct file_lock *fl2)
>  	return fl1->fl_owner == fl2->fl_owner && fl1->fl_pid == fl2->fl_pid;
>  }
>  
> +/*
> + * Since NLM uses two "keys" for tracking locks, we need to hash them down
> + * to one for the blocked_hash. Here, we're just xor'ing the host address
> + * with the pid in order to create a key value for picking a hash bucket.
> + */
> +static unsigned long
> +nlmsvc_owner_key(struct file_lock *fl)
> +{
> +	return (unsigned long)fl->fl_owner ^ (unsigned long)fl->fl_pid;
> +}
> +
>  const struct lock_manager_operations nlmsvc_lock_operations = {
>  	.lm_compare_owner = nlmsvc_same_owner,
> +	.lm_owner_key = nlmsvc_owner_key,
>  	.lm_notify = nlmsvc_notify_blocked,
>  	.lm_grant = nlmsvc_grant_deferred,
>  };
> diff --git a/fs/locks.c b/fs/locks.c
> index 76fb7af..11e7784 100644
> --- a/fs/locks.c
> +++ b/fs/locks.c
> @@ -481,11 +481,19 @@ static int posix_same_owner(struct file_lock *fl1, struct file_lock *fl2)
>  	return fl1->fl_owner == fl2->fl_owner;
>  }
>  
> +static unsigned long
> +posix_owner_key(struct file_lock *fl)
> +{
> +	if (fl->fl_lmops && fl->fl_lmops->lm_owner_key)
> +		return fl->fl_lmops->lm_owner_key(fl);
> +	return (unsigned long)fl->fl_owner;
> +}
> +
>  /* Remove a blocker or lock from one of the global lists */
>  static inline void
>  locks_insert_global_blocked(struct file_lock *waiter)
>  {
> -	hash_add(blocked_hash, &waiter->fl_link, (unsigned long)waiter->fl_owner);
> +	hash_add(blocked_hash, &waiter->fl_link, posix_owner_key(waiter));
>  }
>  
>  static inline void
> @@ -739,7 +747,7 @@ static struct file_lock *what_owner_is_waiting_for(struct file_lock *block_fl)
>  {
>  	struct file_lock *fl;
>  
> -	hash_for_each_possible(blocked_hash, fl, fl_link, (unsigned long)block_fl->fl_owner) {
> +	hash_for_each_possible(blocked_hash, fl, fl_link, posix_owner_key(block_fl)) {
>  		if (posix_same_owner(fl, block_fl))
>  			return fl->fl_next;
>  	}
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 3b340f7..232a345 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -908,6 +908,7 @@ struct file_lock_operations {
>  
>  struct lock_manager_operations {
>  	int (*lm_compare_owner)(struct file_lock *, struct file_lock *);
> +	unsigned long (*lm_owner_key)(struct file_lock *);
>  	void (*lm_notify)(struct file_lock *);	/* unblock callback */
>  	int (*lm_grant)(struct file_lock *, struct file_lock *, int);
>  	void (*lm_break)(struct file_lock *);
> -- 
> 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 v2 11/14] locks: add a new "lm_owner_key" lock operation
Date: Thu, 13 Jun 2013 11:00:33 -0400	[thread overview]
Message-ID: <20130613150033.GA20666@fieldses.org> (raw)
In-Reply-To: <1370948948-31784-12-git-send-email-jlayton@redhat.com>

On Tue, Jun 11, 2013 at 07:09:05AM -0400, Jeff Layton wrote:
> Currently, the hashing that the locking code uses to add these values
> to the blocked_hash is simply calculated using fl_owner field. That's
> valid in most cases except for server-side lockd, which validates the
> owner of a lock based on fl_owner and fl_pid.
> 
> In the case where you have a small number of NFS clients doing a lot
> of locking between different processes, you could end up with all
> the blocked requests sitting in a very small number of hash buckets.
> 
> Add a new lm_owner_key operation to the lock_manager_operations that
> will generate an unsigned long to use as the key in the hashtable.
> That function is only implemented for server-side lockd, and simply
> XORs the fl_owner and fl_pid.

Like I've said I think we should look into defining a lock_owner struct
that lockd can allocate as necessary so that the lock code can just do a
pointer comparison on struct lock_owner *'s.  But maybe that doesn't
work out and in any case it can be future work, so looks fine, ACK.

--b.

> 
> Signed-off-by: Jeff Layton <jlayton@redhat.com>
> ---
>  Documentation/filesystems/Locking |   18 +++++++++++-------
>  fs/lockd/svclock.c                |   12 ++++++++++++
>  fs/locks.c                        |   12 ++++++++++--
>  include/linux/fs.h                |    1 +
>  4 files changed, 34 insertions(+), 9 deletions(-)
> 
> diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking
> index 13f91ab..ee351ac 100644
> --- a/Documentation/filesystems/Locking
> +++ b/Documentation/filesystems/Locking
> @@ -351,6 +351,7 @@ fl_release_private:	maybe		no
>  ----------------------- lock_manager_operations ---------------------------
>  prototypes:
>  	int (*lm_compare_owner)(struct file_lock *, struct file_lock *);
> +	unsigned long (*lm_owner_key)(struct file_lock *);
>  	void (*lm_notify)(struct file_lock *);  /* unblock callback */
>  	int (*lm_grant)(struct file_lock *, struct file_lock *, int);
>  	void (*lm_break)(struct file_lock *); /* break_lease callback */
> @@ -360,18 +361,21 @@ locking rules:
>  
>  			inode->i_lock	file_lock_lock	may block
>  lm_compare_owner:	yes		maybe		no
> +lm_owner_key		yes		yes		no
>  lm_notify:		yes		no		no
>  lm_grant:		no		no		no
>  lm_break:		yes		no		no
>  lm_change		yes		no		no
>  
> -	->lm_compare_owner is generally called with *an* inode->i_lock
> -held. It may not be the i_lock of the inode for either file_lock being
> -compared! This is the case with deadlock detection, since the code has
> -to chase down the owners of locks that may be entirely unrelated to the
> -one on which the lock is being acquired. For deadlock detection however,
> -the file_lock_lock is also held. The locks primarily ensure that neither
> -file_lock disappear out from under you while doing the comparison.
> +	->lm_compare_owner and ->lm_owner_key are generally called with
> +*an* inode->i_lock held. It may not be the i_lock of the inode
> +associated with either file_lock argument! This is the case with deadlock
> +detection, since the code has to chase down the owners of locks that may
> +be entirely unrelated to the one on which the lock is being acquired.
> +For deadlock detection however, the file_lock_lock is also held. The
> +fact that these locks are held ensures that the file_locks do not
> +disappear out from under you while doing the comparison or generating an
> +owner key.
>  
>  --------------------------- buffer_head -----------------------------------
>  prototypes:
> diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c
> index e703318..ce2cdab 100644
> --- a/fs/lockd/svclock.c
> +++ b/fs/lockd/svclock.c
> @@ -744,8 +744,20 @@ static int nlmsvc_same_owner(struct file_lock *fl1, struct file_lock *fl2)
>  	return fl1->fl_owner == fl2->fl_owner && fl1->fl_pid == fl2->fl_pid;
>  }
>  
> +/*
> + * Since NLM uses two "keys" for tracking locks, we need to hash them down
> + * to one for the blocked_hash. Here, we're just xor'ing the host address
> + * with the pid in order to create a key value for picking a hash bucket.
> + */
> +static unsigned long
> +nlmsvc_owner_key(struct file_lock *fl)
> +{
> +	return (unsigned long)fl->fl_owner ^ (unsigned long)fl->fl_pid;
> +}
> +
>  const struct lock_manager_operations nlmsvc_lock_operations = {
>  	.lm_compare_owner = nlmsvc_same_owner,
> +	.lm_owner_key = nlmsvc_owner_key,
>  	.lm_notify = nlmsvc_notify_blocked,
>  	.lm_grant = nlmsvc_grant_deferred,
>  };
> diff --git a/fs/locks.c b/fs/locks.c
> index 76fb7af..11e7784 100644
> --- a/fs/locks.c
> +++ b/fs/locks.c
> @@ -481,11 +481,19 @@ static int posix_same_owner(struct file_lock *fl1, struct file_lock *fl2)
>  	return fl1->fl_owner == fl2->fl_owner;
>  }
>  
> +static unsigned long
> +posix_owner_key(struct file_lock *fl)
> +{
> +	if (fl->fl_lmops && fl->fl_lmops->lm_owner_key)
> +		return fl->fl_lmops->lm_owner_key(fl);
> +	return (unsigned long)fl->fl_owner;
> +}
> +
>  /* Remove a blocker or lock from one of the global lists */
>  static inline void
>  locks_insert_global_blocked(struct file_lock *waiter)
>  {
> -	hash_add(blocked_hash, &waiter->fl_link, (unsigned long)waiter->fl_owner);
> +	hash_add(blocked_hash, &waiter->fl_link, posix_owner_key(waiter));
>  }
>  
>  static inline void
> @@ -739,7 +747,7 @@ static struct file_lock *what_owner_is_waiting_for(struct file_lock *block_fl)
>  {
>  	struct file_lock *fl;
>  
> -	hash_for_each_possible(blocked_hash, fl, fl_link, (unsigned long)block_fl->fl_owner) {
> +	hash_for_each_possible(blocked_hash, fl, fl_link, posix_owner_key(block_fl)) {
>  		if (posix_same_owner(fl, block_fl))
>  			return fl->fl_next;
>  	}
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 3b340f7..232a345 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -908,6 +908,7 @@ struct file_lock_operations {
>  
>  struct lock_manager_operations {
>  	int (*lm_compare_owner)(struct file_lock *, struct file_lock *);
> +	unsigned long (*lm_owner_key)(struct file_lock *);
>  	void (*lm_notify)(struct file_lock *);	/* unblock callback */
>  	int (*lm_grant)(struct file_lock *, struct file_lock *, int);
>  	void (*lm_break)(struct file_lock *);
> -- 
> 1.7.1
> 

  parent reply	other threads:[~2013-06-13 15:00 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-11 11:08 [PATCH v2 00/14] locks: scalability improvements for file locking Jeff Layton
2013-06-11 11:08 ` Jeff Layton
2013-06-11 11:08 ` [Cluster-devel] " Jeff Layton
2013-06-11 11:08 ` [PATCH v2 02/14] locks: make generic_add_lease and generic_delete_lease static Jeff Layton
2013-06-11 11:08   ` Jeff Layton
2013-06-11 11:08   ` [Cluster-devel] " Jeff Layton
2013-06-11 11:08 ` [PATCH v2 03/14] locks: comment cleanups and clarifications Jeff Layton
2013-06-11 11:08   ` Jeff Layton
2013-06-11 11:08   ` [Cluster-devel] " Jeff Layton
2013-06-11 11:08 ` [PATCH v2 04/14] locks: make "added" in __posix_lock_file a bool Jeff Layton
2013-06-11 11:08   ` Jeff Layton
2013-06-11 11:08   ` [Cluster-devel] " Jeff Layton
2013-06-11 11:08 ` [PATCH v2 05/14] locks: encapsulate the fl_link list handling Jeff Layton
2013-06-11 11:08   ` Jeff Layton
2013-06-11 11:08   ` [Cluster-devel] " Jeff Layton
2013-06-11 11:09 ` [PATCH v2 07/14] locks: convert to i_lock to protect i_flock list Jeff Layton
2013-06-11 11:09   ` Jeff Layton
2013-06-11 11:09   ` [Cluster-devel] " Jeff Layton
2013-06-13 14:41   ` J. Bruce Fields
2013-06-13 14:41     ` [Cluster-devel] " J. Bruce Fields
2013-06-13 15:09     ` Jeff Layton
2013-06-13 15:09       ` [Cluster-devel] " Jeff Layton
2013-06-11 11:09 ` [PATCH v2 08/14] locks: ensure that deadlock detection is atomic with respect to blocked_list modification Jeff Layton
2013-06-11 11:09   ` Jeff Layton
2013-06-11 11:09   ` [Cluster-devel] " Jeff Layton
2013-06-11 11:09 ` [PATCH v2 09/14] locks: convert fl_link to a hlist_node Jeff Layton
2013-06-11 11:09   ` Jeff Layton
2013-06-11 11:09   ` [Cluster-devel] " Jeff Layton
2013-06-11 11:09 ` [PATCH v2 10/14] locks: turn the blocked_list into a hashtable Jeff Layton
2013-06-11 11:09   ` Jeff Layton
2013-06-11 11:09   ` [Cluster-devel] " Jeff Layton
2013-06-13 14:50   ` J. Bruce Fields
2013-06-13 14:50     ` [Cluster-devel] " J. Bruce Fields
2013-06-11 11:09 ` [PATCH v2 11/14] locks: add a new "lm_owner_key" lock operation Jeff Layton
2013-06-11 11:09   ` Jeff Layton
2013-06-11 11:09   ` [Cluster-devel] " Jeff Layton
     [not found]   ` <1370948948-31784-12-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-06-13 15:00     ` J. Bruce Fields [this message]
2013-06-13 15:00       ` J. Bruce Fields
2013-06-13 15:00       ` [Cluster-devel] " J. Bruce Fields
     [not found] ` <1370948948-31784-1-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-06-11 11:08   ` [PATCH v2 01/14] cifs: use posix_unblock_lock instead of locks_delete_block Jeff Layton
2013-06-11 11:08     ` Jeff Layton
2013-06-11 11:08     ` [Cluster-devel] " Jeff Layton
2013-06-11 11:09   ` [PATCH v2 06/14] locks: don't walk inode->i_flock list in locks_show Jeff Layton
2013-06-11 11:09     ` Jeff Layton
2013-06-11 11:09     ` [Cluster-devel] " Jeff Layton
2013-06-13 19:45     ` J. Bruce Fields
2013-06-13 19:45       ` [Cluster-devel] " J. Bruce Fields
2013-06-13 20:26       ` Jeff Layton
2013-06-13 20:26         ` [Cluster-devel] " Jeff Layton
     [not found]         ` <51BB040C.3050101@samba.org>
2013-06-15 11:05           ` Jeff Layton
2013-06-15 11:05             ` [Cluster-devel] " Jeff Layton
     [not found]             ` <20130615070535.6367eed9-9yPaYZwiELC+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2013-06-15 15:04               ` Simo
2013-06-15 15:04                 ` Simo
2013-06-15 15:04                 ` [Cluster-devel] " Simo
2013-06-11 11:09   ` [PATCH v2 12/14] locks: give the blocked_hash its own spinlock Jeff Layton
2013-06-11 11:09     ` Jeff Layton
2013-06-11 11:09     ` [Cluster-devel] " Jeff Layton
     [not found]     ` <1370948948-31784-13-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-06-13 15:02       ` J. Bruce Fields
2013-06-13 15:02         ` J. Bruce Fields
2013-06-13 15:02         ` [Cluster-devel] " J. Bruce Fields
2013-06-13 15:18         ` Jeff Layton
2013-06-13 15:18           ` [Cluster-devel] " Jeff Layton
     [not found]           ` <20130613111844.59421622-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2013-06-13 15:20             ` J. Bruce Fields
2013-06-13 15:20               ` J. Bruce Fields
2013-06-13 15:20               ` [Cluster-devel] " J. Bruce Fields
2013-06-11 16:04   ` [PATCH v2 00/14] locks: scalability improvements for file locking J. Bruce Fields
2013-06-11 16:04     ` J. Bruce Fields
2013-06-11 16:04     ` [Cluster-devel] " J. Bruce Fields
2013-06-11 16:35     ` Jeff Layton
2013-06-11 16:35       ` Jeff Layton
2013-06-11 16:35       ` [Cluster-devel] " Jeff Layton
2013-06-11 11:09 ` [PATCH v2 13/14] seq_file: add seq_list_*_percpu helpers Jeff Layton
2013-06-11 11:09   ` [Cluster-devel] " Jeff Layton
     [not found]   ` <1370948948-31784-14-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-06-13 15:27     ` J. Bruce Fields
2013-06-13 15:27       ` J. Bruce Fields
2013-06-13 15:27       ` [Cluster-devel] " J. Bruce Fields
2013-06-11 11:09 ` [PATCH v2 14/14] locks: move file_lock_list to a set of percpu hlist_heads and convert file_lock_lock to an lglock Jeff Layton
2013-06-11 11:09   ` Jeff Layton
2013-06-11 11:09   ` [Cluster-devel] " Jeff Layton
     [not found]   ` <1370948948-31784-15-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-06-13 15:37     ` J. Bruce Fields
2013-06-13 15:37       ` J. Bruce Fields
2013-06-13 15:37       ` [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=20130613150033.GA20666@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.