]> git.neil.brown.name Git - LaFS.git/commitdiff
Improve lafs_iget_fs
authorNeilBrown <neilb@suse.de>
Fri, 13 Aug 2010 04:00:56 +0000 (14:00 +1000)
committerNeilBrown <neilb@suse.de>
Fri, 13 Aug 2010 04:00:56 +0000 (14:00 +1000)
Allow getting inodes in other filesystem.

This isn't quite perfect yet though.

Signed-off-by: NeilBrown <neilb@suse.de>
inode.c

diff --git a/inode.c b/inode.c
index 162735fdc333e8270948b580b20fa0d5e36a76eb..a17cd7e1d2f2f4e0ec8fa2c4687d0cf81eb3d0ad 100644 (file)
--- 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