Re: [PATCH] xfs: fix nofs context corruption in xfs_btree_split_worker
From: Christoph Hellwig
Date: Mon Jul 20 2026 - 04:35:53 EST
On Mon, Jul 20, 2026 at 01:05:22PM +0800, Yun Zhou wrote:
> current_set_flags_nested(&pflags, new_pflags);
> - xfs_trans_set_context(args->cur->bc_tp);
> + nofs_flags = memalloc_nofs_save();
Note that the above is the only user of current_set_flags_nested.
> args->result = __xfs_btree_split(args->cur, args->level, args->ptrp,
> args->key, args->curp, args->stat);
>
> - xfs_trans_clear_context(args->cur->bc_tp);
> + memalloc_nofs_restore(nofs_flags);
> current_restore_flags_nested(&pflags, new_pflags);
and this is the only caller of current_restore_flags_nested. Both
of which modify the task flags just like memalloc_nofs_save.
I think we'd be much better of just killing all these silly helpers
and do direct current->flags manipulations, which will both clarify
this code and fix the bug it caused.
Similarly xfs_trans_set_context / xfs_trans_set_context need to go
away as they were a part of this problem. And to make this coherent,
it should be combined with your other flags series.