On Tue 24-06-08 18:16:21, Duane Griffin wrote: > 2008/6/24 Jan Kara <jack@xxxxxxx>: > >> + /* > >> + * 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@xxxxxxx> SUSE Labs, CR -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html