Messages in this thread | | | Date | Tue, 24 Jun 2008 19:18:57 +0200 | From | Jan Kara <> | Subject | Re: [PATCH] ext3: handle corrupted orphan list at mount |
| |
On Tue 24-06-08 18:16:21, Duane Griffin wrote: > 2008/6/24 Jan Kara <jack@suse.cz>: > >> + /* > >> + * If the orphans has i_nlinks > 0 then it should be able to be > >> + * truncated, otherwise it won't be removed from the orphan list > >> + * during processing and an infinite loop will result. > >> + */ > >> + if (inode->i_nlink && !ext3_can_truncate(inode)) > >> + goto bad_orphan; > >> + > > Maybe I miss something but shouldn't above rather be ||? > > No, it is correct. If i_nlink == 0 the orphan will be deleted in the > cleanup loop by the iput. If i_nlink > 0 then ext3_truncate is called, > which usually calls ext3_orphan_del on the way out, thereby removing > the node from the orphan list. However, if it exits too early > (basically if the ext3_can_truncate check fails, although there are > other failure conditions such as OOM that can also cause it to exit > early) then it doesn't, hence we end up in the infinite loop. So the > check here says, if this node is not going to be deleted or truncated > then it is invalid. Ah, OK, I forgot that you want to handle also truncation without deletion of the inode itself. Thanks for explanation.
Honza
-- Jan Kara <jack@suse.cz> SUSE Labs, CR
| |