Re: [PATCH v10 2/5] ext4: introduce ext4_put_ea_inode() for safe deferred iput

From: Jan Kara

Date: Mon Jun 29 2026 - 04:29:06 EST


On Sun 28-06-26 16:13:18, Zhou, Yun wrote:
>
>
> On 6/27/26 00:53, Jan Kara wrote:
> > On Thu 25-06-26 23:29:38, Yun Zhou wrote:
> > > +
> > > +/*
> > > + * Drain all pending deferred EA inode iputs. Must be called before
> > > + * freeing resources that eviction depends on (quota, block allocator).
> > > + * Loops because worker iput may trigger eviction that re-queues.
> > > + */
> >
> > Can you please explain how iput of EA inode can trigger iput of another EA
> > inode? So far I don't think that's possible but perhaps I'm missing
> > something.
> >
> > > +static inline void ext4_drain_ea_inode_work(struct ext4_sb_info *sbi)
> > > +{
> > > + while (flush_delayed_work(&sbi->s_ea_inode_work) ||
> > > + !llist_empty(&sbi->s_ea_inode_to_free))
> > > + ;
> > > +}
> > >
>
> On a corrupted fs, an evicted ea_inode might still have xattrs and point to
> another ea inode, which creates a potential "re-arm" scenario.

That should be caught when loading such EA inode into memory and result in
EFSCORRUPTED at that point. So please add such check to __ext4_iget().

Honza
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR