On Sun, Sep 07, 2014 at 08:25:57AM -0400, Brian Foster wrote: > The collapse range implementation uses a transaction per extent shift. > The progress of the overall operation is tracked via the current extent > index of the in-core extent list. This is racy because the ilock must be > dropped and reacquired for each transaction according to locking and log > reservation rules. Therefore, writeback to prior regions of the file is > possible and can change the extent count. This changes the extent to > which the current index refers and causes the collapse to fail mid > operation. To avoid this problem, the entire file is currently written > back before the collapse operation starts. > > To eliminate the need to flush the entire file, use the file offset > (fsb) to track the progress of the overall extent shift operation rather > than the extent index. Modify xfs_bmap_shift_extents() to > unconditionally convert the start_fsb parameter to an extent index and > return the file offset of the extent where the shift left off, if > further extents exist. The bulk of ths function can remain based on > extent index as ilock is held by the caller. xfs_collapse_file_space() > now uses the fsb output as the starting point for the subsequent shift. > > Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx> Looks good. There's a couple of small things I noticed, but they aren't worth redoing the patches again to fix. Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx> -- Dave Chinner david@xxxxxxxxxxxxx _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs