Re: [PATCH] xfs: fix nofs context corruption in xfs_btree_split_worker

From: Zhou, Yun

Date: Fri Jul 24 2026 - 04:04:08 EST


Hi Christoph,

On 7/20/2026 4:35 PM, Christoph Hellwig wrote:
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.


Thanks a lot.
I'd like to understand the scope you have in mind. Should the removal of xfs_trans_set/clear_context and current_set/restore_flags_nested be part of my nofs series, or is that something you'd prefer to handle separately?

BR,
Yun