From cd09f1a230d6cedd0e83d02e4e019aa5d269ceea Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Fri, 13 Aug 2010 14:00:56 +1000 Subject: [PATCH] Improve lafs_iget_fs Allow getting inodes in other filesystem. This isn't quite perfect yet though. Signed-off-by: NeilBrown --- inode.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) 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 -- 2.39.5