• C
    xfs: kill the b_strat callback in xfs_buf · 939d723b
    Christoph Hellwig 提交于
    The b_strat callback is used by xfs_buf_iostrategy to perform additional
    checks before submitting a buffer.  It is used in xfs_bwrite and when
    writing out delayed buffers.  In xfs_bwrite it we can de-virtualize the
    call easily as b_strat is set a few lines above the call to
    xfs_buf_iostrategy.  For the delayed buffers the rationale is a bit
    more complicated:
    
     - there are three callers of xfs_buf_delwri_queue, which places buffers
       on the delwri list:
        (1) xfs_bdwrite - this sets up b_strat, so it's fine
        (2) xfs_buf_iorequest.  None of the callers can have XBF_DELWRI set:
    	- xlog_bdstrat is only used for log buffers, which are never delwri
    	- _xfs_buf_read explicitly clears the delwri flag
    	- xfs_buf_iodone_work retries log buffers only
    	- xfsbdstrat - only used for reads, superblock writes without the
    	  delwri flag, log I/O and file zeroing with explicitly allocated
    	  buffers.
    	- xfs_buf_iostrategy - only calls xfs_buf_iorequest if b_strat is
    	  not set
        (3) xfs_buf_unlock
    	- only puts the buffer on the delwri list if the DELWRI flag is
    	  already set.  The DELWRI flag is only ever set in xfs_bwrite,
    	  xfs_buf_iodone_callbacks, or xfs_trans_log_buf.  For
    	  xfs_buf_iodone_callbacks and xfs_trans_log_buf we require
    	  an initialized buf item, which means b_strat was set to
    	  xfs_bdstrat_cb in xfs_buf_item_init.
    
    Conclusion: we can just get rid of the callback and replace it with
    explicit calls to xfs_bdstrat_cb.
    Signed-off-by: NChristoph Hellwig <hch@lst.de>
    Reviewed-by: NDave Chinner <dchinner@redhat.com>
    Signed-off-by: NDave Chinner <david@fromorbit.com>
    939d723b
xfs_inode.c 120.4 KB