On Mon, Jan 08, 2007 at 03:47:13PM -0500, Jeff Layton wrote: > This changes the superblock creation routines that call new_inode to take steps > to avoid later collisions with other inodes that get created. I took the > approach here of not hashing things unless is was strictly necessary, though > that does mean that filesystem authors need to be careful to avoid collisions > by calling iunique properly. > > Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx> > > diff --git a/fs/libfs.c b/fs/libfs.c > index 503898d..5bdaf00 100644 > --- a/fs/libfs.c > +++ b/fs/libfs.c > @@ -217,6 +217,12 @@ int get_sb_pseudo(struct file_system_type *fs_type, char *name, > root = new_inode(s); > if (!root) > goto Enomem; > + /* > + * since this is the first inode, make it number 1. New inodes created > + * after this must take care not to collide with it (by passing > + * max_reserved of 1 to iunique). > + */ > + root->i_ino = 1; Ok. > return -ENOMEM; > + /* set to high value to try and avoid collisions with loop below */ > + inode->i_ino = 0xffffffff; > + insert_inode_hash(inode); This is odd. Can't we just add some constant base to the loop below? > inode->i_mode = S_IFDIR | 0755; > inode->i_uid = inode->i_gid = 0; > inode->i_blocks = 0; > @@ -399,6 +408,11 @@ int simple_fill_super(struct super_block *s, int magic, struct tree_descr *files > inode->i_blocks = 0; > inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; > inode->i_fop = files->ops; > + /* > + * no need to hash these, but you need to make sure that any > + * calls to iunique on this mount call it with a max_reserved > + * value high enough to avoid collisions with these inodes. > + */ > inode->i_ino = i; > d_add(dentry, inode); - To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html