From: NeilBrown Date: Fri, 13 Aug 2010 04:00:56 +0000 (+1000) Subject: Improve lafs_iget_fs X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=cd09f1a230d6cedd0e83d02e4e019aa5d269ceea;p=LaFS.git Improve lafs_iget_fs Allow getting inodes in other filesystem. This isn't quite perfect yet though. Signed-off-by: NeilBrown --- diff --git a/inode.c b/inode.c index 162735f..a17cd7e 100644 --- a/inode.c +++ b/inode.c @@ -204,6 +204,7 @@ struct inode * lafs_iget_fs(struct fs *fs, int fsnum, int inum, int async) { struct super_block *sb; + struct inode *rv; sb = fs->prime_sb; @@ -212,8 +213,26 @@ lafs_iget_fs(struct fs *fs, int fsnum, int inum, int async) * subordinate filesystem * FIXME */ - } - return lafs_iget(sb, inum, async); + struct inode *filesys; + + printk("get filesys %d\n", fsnum); + BUG(); + filesys = lafs_iget(sb, fsnum, async); + if (IS_ERR(filesys)) + return filesys; + if (filesys->i_sb == sb) { + /* No mounted fs here. + * Need to mount one FIXME + */ + BUG(); + return ERR_PTR(-ENOENT); + } + printk("get inode %d\n", inum); + rv = lafs_iget(filesys->i_sb, inum, async); + iput(filesys); + } else + rv = lafs_iget(sb, inum, async); + return rv; } int __must_check