aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_trans.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/xfs_trans.c')
-rw-r--r--fs/xfs/xfs_trans.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c
index bedc5a5133a5..912b42f5fe4a 100644
--- a/fs/xfs/xfs_trans.c
+++ b/fs/xfs/xfs_trans.c
@@ -259,6 +259,14 @@ xfs_trans_alloc(
259 struct xfs_trans *tp; 259 struct xfs_trans *tp;
260 int error; 260 int error;
261 261
262 /*
263 * Allocate the handle before we do our freeze accounting and setting up
264 * GFP_NOFS allocation context so that we avoid lockdep false positives
265 * by doing GFP_KERNEL allocations inside sb_start_intwrite().
266 */
267 tp = kmem_zone_zalloc(xfs_trans_zone,
268 (flags & XFS_TRANS_NOFS) ? KM_NOFS : KM_SLEEP);
269
262 if (!(flags & XFS_TRANS_NO_WRITECOUNT)) 270 if (!(flags & XFS_TRANS_NO_WRITECOUNT))
263 sb_start_intwrite(mp->m_super); 271 sb_start_intwrite(mp->m_super);
264 272
@@ -270,8 +278,6 @@ xfs_trans_alloc(
270 mp->m_super->s_writers.frozen == SB_FREEZE_COMPLETE); 278 mp->m_super->s_writers.frozen == SB_FREEZE_COMPLETE);
271 atomic_inc(&mp->m_active_trans); 279 atomic_inc(&mp->m_active_trans);
272 280
273 tp = kmem_zone_zalloc(xfs_trans_zone,
274 (flags & XFS_TRANS_NOFS) ? KM_NOFS : KM_SLEEP);
275 tp->t_magic = XFS_TRANS_HEADER_MAGIC; 281 tp->t_magic = XFS_TRANS_HEADER_MAGIC;
276 tp->t_flags = flags; 282 tp->t_flags = flags;
277 tp->t_mountp = mp; 283 tp->t_mountp = mp;