xfs: pull up stack_switch check into xfs_bmapi_write
authorBrian Foster <bfoster@redhat.com>
Thu, 17 Jan 2013 18:11:29 +0000 (13:11 -0500)
committerBen Myers <bpm@sgi.com>
Thu, 17 Jan 2013 23:53:37 +0000 (17:53 -0600)
The stack_switch check currently occurs in __xfs_bmapi_allocate,
which means the stack switch only occurs when xfs_bmapi_allocate()
is called in a loop. Pull the check up before the loop in
xfs_bmapi_write() such that the first iteration of the loop has
consistent behavior.

Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
fs/xfs/xfs_bmap.c

index c5077208e419aee3fdfb3bea1bb40ca4e87fa38f..491f35e2dd266eb792e4b2fe934bcb4ee40a35d5 100644 (file)
@@ -4676,9 +4676,6 @@ __xfs_bmapi_allocate(
                        return error;
        }
 
-       if (bma->flags & XFS_BMAPI_STACK_SWITCH)
-               bma->stack_switch = 1;
-
        error = xfs_bmap_alloc(bma);
        if (error)
                return error;
@@ -4952,6 +4949,9 @@ xfs_bmapi_write(
        bma.flist = flist;
        bma.firstblock = firstblock;
 
+       if (flags & XFS_BMAPI_STACK_SWITCH)
+               bma.stack_switch = 1;
+
        while (bno < end && n < *nmap) {
                inhole = eof || bma.got.br_startoff > bno;
                wasdelay = !inhole && isnullstartblock(bma.got.br_startblock);