Re: [PATCH] xfs: remove b_last_holder & associated macros

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

 



On Fri, Aug 10, 2018 at 02:46:04PM -0500, Eric Sandeen wrote:
> The old lock tracking infrastructure in xfs using the b_last_holder
> field seems to only be useful if you can get into the system with a
> debugger; it seems that the existing tracepoints would be the way to
> go these days, and this old infrastructure can be removed.
> 
> Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
> ---
> 
> If I'm missing the usefulness of this, please speak up :)

The tracepoints already mention the task trying to lock/release the lock, so,
yeah, I don't see much usability for it anymore.

There is a single usage I could think of, which would be some deadlock in
xfs_buf code, and forcing a crash and reading the b_last_holder from the vmcore
would give some clue about the deadlock.
But... For this to happen, the kernel running should be compiled with debug, so,
it's not a production thing, and, if the problem could be reproduced, then,
enabling the tracepoints will do the 'same' job.

So, IMHO it's good to go.

Reviewed-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx>


> 
> diff --git a/fs/xfs/xfs.h b/fs/xfs/xfs.h
> index 583a9f539bf1..f6ffb4f248f7 100644
> --- a/fs/xfs/xfs.h
> +++ b/fs/xfs/xfs.h
> @@ -8,7 +8,6 @@
>  
>  #ifdef CONFIG_XFS_DEBUG
>  #define DEBUG 1
> -#define XFS_BUF_LOCK_TRACKING 1
>  #endif
>  
>  #ifdef CONFIG_XFS_ASSERT_FATAL
> diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
> index c641c7fa1a03..e839907e8492 100644
> --- a/fs/xfs/xfs_buf.c
> +++ b/fs/xfs/xfs_buf.c
> @@ -34,16 +34,6 @@
>  
>  static kmem_zone_t *xfs_buf_zone;
>  
> -#ifdef XFS_BUF_LOCK_TRACKING
> -# define XB_SET_OWNER(bp)	((bp)->b_last_holder = current->pid)
> -# define XB_CLEAR_OWNER(bp)	((bp)->b_last_holder = -1)
> -# define XB_GET_OWNER(bp)	((bp)->b_last_holder)
> -#else
> -# define XB_SET_OWNER(bp)	do { } while (0)
> -# define XB_CLEAR_OWNER(bp)	do { } while (0)
> -# define XB_GET_OWNER(bp)	do { } while (0)
> -#endif
> -
>  #define xb_to_gfp(flags) \
>  	((((flags) & XBF_READ_AHEAD) ? __GFP_NORETRY : GFP_NOFS) | __GFP_NOWARN)
>  
> @@ -226,7 +216,6 @@ _xfs_buf_alloc(
>  	INIT_LIST_HEAD(&bp->b_li_list);
>  	sema_init(&bp->b_sema, 0); /* held, no waiters */
>  	spin_lock_init(&bp->b_lock);
> -	XB_SET_OWNER(bp);
>  	bp->b_target = target;
>  	bp->b_flags = flags;
>  
> @@ -1091,12 +1080,10 @@ xfs_buf_trylock(
>  	int			locked;
>  
>  	locked = down_trylock(&bp->b_sema) == 0;
> -	if (locked) {
> -		XB_SET_OWNER(bp);
> +	if (locked)
>  		trace_xfs_buf_trylock(bp, _RET_IP_);
> -	} else {
> +	else
>  		trace_xfs_buf_trylock_fail(bp, _RET_IP_);
> -	}
>  	return locked;
>  }
>  
> @@ -1118,7 +1105,6 @@ xfs_buf_lock(
>  	if (atomic_read(&bp->b_pin_count) && (bp->b_flags & XBF_STALE))
>  		xfs_log_force(bp->b_target->bt_mount, 0);
>  	down(&bp->b_sema);
> -	XB_SET_OWNER(bp);
>  
>  	trace_xfs_buf_lock_done(bp, _RET_IP_);
>  }
> @@ -1129,9 +1115,7 @@ xfs_buf_unlock(
>  {
>  	ASSERT(xfs_buf_islocked(bp));
>  
> -	XB_CLEAR_OWNER(bp);
>  	up(&bp->b_sema);
> -
>  	trace_xfs_buf_unlock(bp, _RET_IP_);
>  }
>  
> diff --git a/fs/xfs/xfs_buf.h b/fs/xfs/xfs_buf.h
> index f04613181ca1..4e3171acd0f8 100644
> --- a/fs/xfs/xfs_buf.h
> +++ b/fs/xfs/xfs_buf.h
> @@ -198,10 +198,6 @@ typedef struct xfs_buf {
>  	int			b_last_error;
>  
>  	const struct xfs_buf_ops	*b_ops;
> -
> -#ifdef XFS_BUF_LOCK_TRACKING
> -	int			b_last_holder;
> -#endif
>  } xfs_buf_t;
>  
>  /* Finding and Reading Buffers */
> 

-- 
Carlos



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux