Re: [PATCH] locks: allow __break_lease to sleep even when break_time is 0

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks, applying.--b.

On Tue, Apr 15, 2014 at 08:44:12AM -0400, Jeff Layton wrote:
> A fl->fl_break_time of 0 has a special meaning to the lease break code
> that basically means "never break the lease". knfsd uses this to ensure
> that leases don't disappear out from under it.
> 
> Unfortunately, the code in __break_lease can end up passing this value
> to wait_event_interruptible as a timeout, which prevents it from going
> to sleep at all. This causes __break_lease to spin in a tight loop and
> causes soft lockups.
> 
> Fix this by ensuring that we pass a minimum value of 1 as a timeout
> instead.
> 
> Cc: <stable@xxxxxxxxxxxxxxx>
> Cc: J. Bruce Fields <bfields@xxxxxxxxxxxx>
> Reported-by: Terry Barnaby <terry1@xxxxxxxxxxx>
> Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
> ---
>  fs/locks.c | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/locks.c b/fs/locks.c
> index 13fc7a6d380a..b380f5543614 100644
> --- a/fs/locks.c
> +++ b/fs/locks.c
> @@ -1391,11 +1391,10 @@ int __break_lease(struct inode *inode, unsigned int mode, unsigned int type)
>  
>  restart:
>  	break_time = flock->fl_break_time;
> -	if (break_time != 0) {
> +	if (break_time != 0)
>  		break_time -= jiffies;
> -		if (break_time == 0)
> -			break_time++;
> -	}
> +	if (break_time == 0)
> +		break_time++;
>  	locks_insert_block(flock, new_fl);
>  	spin_unlock(&inode->i_lock);
>  	error = wait_event_interruptible_timeout(new_fl->fl_wait,
> -- 
> 1.9.0
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux