Re: 2.4.15-pre9 breakage (inode.c)

Alexander Viro
2001-11-24T06:09:17Z

On Fri, 23 Nov 2001, Linus Torvalds wrote:

> > - if (!list_empty(&inode->i_hash) && sb && sb->s_root) {
> > + if (!list_empty(&inode->i_hash)) {
> > if (!(inode->i_state & (I_DIRTY|I_LOCK))) {
> > list_del(&inode->i_list);
> > list_add(&inode->i_list, &inode_unused);
>
> I have to say that I like this patch better myself - the added tests are
> not sensible, and just removing them seems to be the right thing.

Test for ->s_root is bogus and had been removed - check the patch I've sent.

However, that variant suffers from the following problem: if ->read_super()
fails after it had done _any_ iget() (root inode, journal, whatever) -
we are screwed. Sure, we do iput(). And then we have inode stuck in icache,
with ->i_sb pointing nowhere. When it finally gets evicted we call
inode->i_sb->s_op->clear_inode(). Oops...