mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-03 21:45:08 -04:00
xfs: share more code in xfs_buffered_write_iomap_begin
Introduce a local iomap_flags variable so that the code allocating new delalloc blocks in the data fork can fall through to the found_imap label and reuse the code to unlock and fill the iomap. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Carlos Maiolino <cem@kernel.org>
This commit is contained in:
committed by
Carlos Maiolino
parent
8fe3b21efa
commit
c29440ff66
@@ -975,6 +975,7 @@ xfs_buffered_write_iomap_begin(
|
||||
int allocfork = XFS_DATA_FORK;
|
||||
int error = 0;
|
||||
unsigned int lockmode = XFS_ILOCK_EXCL;
|
||||
unsigned int iomap_flags = 0;
|
||||
u64 seq;
|
||||
|
||||
if (xfs_is_shutdown(mp))
|
||||
@@ -1145,6 +1146,11 @@ xfs_buffered_write_iomap_begin(
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Flag newly allocated delalloc blocks with IOMAP_F_NEW so we punch
|
||||
* them out if the write happens to fail.
|
||||
*/
|
||||
iomap_flags |= IOMAP_F_NEW;
|
||||
if (allocfork == XFS_COW_FORK) {
|
||||
error = xfs_bmapi_reserve_delalloc(ip, allocfork, offset_fsb,
|
||||
end_fsb - offset_fsb, prealloc_blocks, &cmap,
|
||||
@@ -1162,19 +1168,11 @@ xfs_buffered_write_iomap_begin(
|
||||
if (error)
|
||||
goto out_unlock;
|
||||
|
||||
/*
|
||||
* Flag newly allocated delalloc blocks with IOMAP_F_NEW so we punch
|
||||
* them out if the write happens to fail.
|
||||
*/
|
||||
seq = xfs_iomap_inode_sequence(ip, IOMAP_F_NEW);
|
||||
xfs_iunlock(ip, lockmode);
|
||||
trace_xfs_iomap_alloc(ip, offset, count, allocfork, &imap);
|
||||
return xfs_bmbt_to_iomap(ip, iomap, &imap, flags, IOMAP_F_NEW, seq);
|
||||
|
||||
found_imap:
|
||||
seq = xfs_iomap_inode_sequence(ip, 0);
|
||||
seq = xfs_iomap_inode_sequence(ip, iomap_flags);
|
||||
xfs_iunlock(ip, lockmode);
|
||||
return xfs_bmbt_to_iomap(ip, iomap, &imap, flags, 0, seq);
|
||||
return xfs_bmbt_to_iomap(ip, iomap, &imap, flags, iomap_flags, seq);
|
||||
|
||||
convert_delay:
|
||||
xfs_iunlock(ip, lockmode);
|
||||
|
||||
Reference in New Issue
Block a user