[XFS] Add parameters to xfs_bmapi() and xfs_bunmapi() to have them report
the range spanned by modifications to the in-core extent map. Add XFS_BUNMAPI() and XFS_SWAP_EXTENTS() macros that call xfs_bunmapi() and xfs_swap_extents() via the ioops vector. Change all calls that may modify the in-core extent map for the data fork to go through the ioops vector. This allows a cache of extent map data to be kept in sync. SGI-PV: 947615 SGI-Modid: xfs-linux-melb:xfs-kern:209226a Signed-off-by: Olaf Weber <olaf@sgi.com> Signed-off-by: Nathan Scott <nathans@sgi.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000-2005 Silicon Graphics, Inc.
|
||||
* Copyright (c) 2000-2006 Silicon Graphics, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@@ -252,7 +252,7 @@ xfs_iomap(
|
||||
error = XFS_BMAPI(mp, NULL, io, offset_fsb,
|
||||
(xfs_filblks_t)(end_fsb - offset_fsb),
|
||||
bmapi_flags, NULL, 0, &imap,
|
||||
&nimaps, NULL);
|
||||
&nimaps, NULL, NULL);
|
||||
|
||||
if (error)
|
||||
goto out;
|
||||
@@ -519,8 +519,8 @@ xfs_iomap_write_direct(
|
||||
*/
|
||||
XFS_BMAP_INIT(&free_list, &firstfsb);
|
||||
nimaps = 1;
|
||||
error = xfs_bmapi(tp, ip, offset_fsb, count_fsb,
|
||||
bmapi_flag, &firstfsb, 0, &imap, &nimaps, &free_list);
|
||||
error = XFS_BMAPI(mp, tp, io, offset_fsb, count_fsb, bmapi_flag,
|
||||
&firstfsb, 0, &imap, &nimaps, &free_list, NULL);
|
||||
if (error)
|
||||
goto error0;
|
||||
|
||||
@@ -610,8 +610,8 @@ xfs_iomap_eof_want_preallocate(
|
||||
while (count_fsb > 0) {
|
||||
imaps = nimaps;
|
||||
firstblock = NULLFSBLOCK;
|
||||
error = XFS_BMAPI(mp, NULL, io, start_fsb, count_fsb,
|
||||
0, &firstblock, 0, imap, &imaps, NULL);
|
||||
error = XFS_BMAPI(mp, NULL, io, start_fsb, count_fsb, 0,
|
||||
&firstblock, 0, imap, &imaps, NULL, NULL);
|
||||
if (error)
|
||||
return error;
|
||||
for (n = 0; n < imaps; n++) {
|
||||
@@ -695,11 +695,11 @@ retry:
|
||||
|
||||
nimaps = XFS_WRITE_IMAPS;
|
||||
firstblock = NULLFSBLOCK;
|
||||
error = xfs_bmapi(NULL, ip, offset_fsb,
|
||||
error = XFS_BMAPI(mp, NULL, io, offset_fsb,
|
||||
(xfs_filblks_t)(last_fsb - offset_fsb),
|
||||
XFS_BMAPI_DELAY | XFS_BMAPI_WRITE |
|
||||
XFS_BMAPI_ENTIRE, &firstblock, 1, imap,
|
||||
&nimaps, NULL);
|
||||
&nimaps, NULL, NULL);
|
||||
if (error && (error != ENOSPC))
|
||||
return XFS_ERROR(error);
|
||||
|
||||
@@ -832,9 +832,9 @@ xfs_iomap_write_allocate(
|
||||
}
|
||||
|
||||
/* Go get the actual blocks */
|
||||
error = xfs_bmapi(tp, ip, map_start_fsb, count_fsb,
|
||||
error = XFS_BMAPI(mp, tp, io, map_start_fsb, count_fsb,
|
||||
XFS_BMAPI_WRITE, &first_block, 1,
|
||||
imap, &nimaps, &free_list);
|
||||
imap, &nimaps, &free_list, NULL);
|
||||
if (error)
|
||||
goto trans_cancel;
|
||||
|
||||
@@ -955,9 +955,9 @@ xfs_iomap_write_unwritten(
|
||||
*/
|
||||
XFS_BMAP_INIT(&free_list, &firstfsb);
|
||||
nimaps = 1;
|
||||
error = xfs_bmapi(tp, ip, offset_fsb, count_fsb,
|
||||
error = XFS_BMAPI(mp, tp, io, offset_fsb, count_fsb,
|
||||
XFS_BMAPI_WRITE|XFS_BMAPI_CONVERT, &firstfsb,
|
||||
1, &imap, &nimaps, &free_list);
|
||||
1, &imap, &nimaps, &free_list, NULL);
|
||||
if (error)
|
||||
goto error_on_bmapi_transaction;
|
||||
|
||||
|
Reference in New Issue
Block a user