Re: [PATCH v2 20/49] nfs41: close a small race window when adding new layout to global list

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

 



Hi again,

On 12/24/2014 02:12 AM, Tom Haynes wrote:
> From: Peng Tao <tao.peng@xxxxxxxxxxxxxxx>
> 
> Signed-off-by: Peng Tao <tao.peng@xxxxxxxxxxxxxxx>
> Signed-off-by: Tom Haynes <Thomas.Haynes@xxxxxxxxxxxxxxx>
> ---
>  fs/nfs/pnfs.c | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
> index 2d25670..fa00b56 100644
> --- a/fs/nfs/pnfs.c
> +++ b/fs/nfs/pnfs.c
> @@ -1288,7 +1288,6 @@ pnfs_update_layout(struct inode *ino,
>  	struct nfs_client *clp = server->nfs_client;
>  	struct pnfs_layout_hdr *lo;
>  	struct pnfs_layout_segment *lseg = NULL;
> -	bool first;
>  
>  	if (!pnfs_enabled_sb(NFS_SERVER(ino)))
>  		goto out;
> @@ -1321,16 +1320,15 @@ pnfs_update_layout(struct inode *ino,
>  	if (pnfs_layoutgets_blocked(lo, 0))
>  		goto out_unlock;
>  	atomic_inc(&lo->plh_outstanding);
> -
> -	first = list_empty(&lo->plh_layouts) ? true : false;
>  	spin_unlock(&ino->i_lock);
>  
> -	if (first) {
> +	if (list_empty(&lo->plh_layouts)) {
>  		/* The lo must be on the clp list if there is any
>  		 * chance of a CB_LAYOUTRECALL(FILE) coming in.
>  		 */
>  		spin_lock(&clp->cl_lock);
> -		list_add_tail(&lo->plh_layouts, &server->layouts);
> +		if (list_empty(&lo->plh_layouts))
> +			list_add_tail(&lo->plh_layouts, &server->layouts);
>  		spin_unlock(&clp->cl_lock);
>  	}

Do we really need to call list_empty() twice?  Would there be a serious performance drawback if we removed the outer layer if condition and then always call list_empty() under the cl_lock?

Thanks,
Anna

>  
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux