xfs: set firstfsb to NULLFSBLOCK before feeding it to _bmapi_write
authorDarrick J. Wong <darrick.wong@oracle.com>
Mon, 17 Jul 2017 21:30:51 +0000 (14:30 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Thu, 20 Jul 2017 21:42:33 +0000 (14:42 -0700)
We must initialize the firstfsb parameter to _bmapi_write so that it
doesn't incorrectly treat stack garbage as a restriction on which AGs
it can search for free space.

Fixes-coverity-id: 1402025
Fixes-coverity-id: 1415167
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
fs/xfs/libxfs/xfs_bmap.c
fs/xfs/xfs_reflink.c

index 0a98807..ee118ce 100644 (file)
@@ -6499,6 +6499,15 @@ xfs_bmap_finish_one(
        xfs_fsblock_t                   firstfsb;
        int                             error = 0;
 
+       /*
+        * firstfsb is tied to the transaction lifetime and is used to
+        * ensure correct AG locking order and schedule work item
+        * continuations.  XFS_BUI_MAX_FAST_EXTENTS (== 1) restricts us
+        * to only making one bmap call per transaction, so it should
+        * be safe to have it as a local variable here.
+        */
+       firstfsb = NULLFSBLOCK;
+
        trace_xfs_bmap_deferred(tp->t_mountp,
                        XFS_FSB_TO_AGNO(tp->t_mountp, startblock), type,
                        XFS_FSB_TO_AGBNO(tp->t_mountp, startblock),
index ab2270a..d9b3d57 100644 (file)
@@ -329,7 +329,7 @@ xfs_reflink_convert_cow_extent(
        xfs_filblks_t                   count_fsb,
        struct xfs_defer_ops            *dfops)
 {
-       xfs_fsblock_t                   first_block;
+       xfs_fsblock_t                   first_block = NULLFSBLOCK;
        int                             nimaps = 1;
 
        if (imap->br_state == XFS_EXT_NORM)