]> git.neil.brown.name Git - LaFS.git/commitdiff
Change various other functions to take an inode rather than a superblock.
authorNeilBrown <neilb@suse.de>
Mon, 7 Mar 2011 05:58:57 +0000 (16:58 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 7 Mar 2011 05:58:57 +0000 (16:58 +1100)
This is a natural follow-on from previous patch.

Signed-off-by: NeilBrown <neilb@suse.de>
dir.c
inode.c
lafs.h
roll.c
super.c

diff --git a/dir.c b/dir.c
index e0e6d4cf773692a9419a2441a5af6597081831cc..0dd504591d47fe1c423ce8cc3cbb0fa9893bdcc8 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -833,7 +833,7 @@ lafs_create(struct inode *dir, struct dentry *de, int mode,
 /* Need to allocate an inode and space in the directory */
        struct fs *fs = fs_from_inode(dir);
        struct datablock *db;
-       struct inode *ino = lafs_new_inode(fs, dir->i_sb,
+       struct inode *ino = lafs_new_inode(fs, LAFSI(dir)->filesys,
                                           dir, TypeFile, 0, mode, &db);
        struct dirop_handle doh;
        struct update_handle uh;
@@ -1126,7 +1126,7 @@ lafs_symlink(struct inode *dir, struct dentry *de,
        if (l > fs->blocksize-1)
                return -ENAMETOOLONG;
 
-       ino = lafs_new_inode(fs, dir->i_sb, dir,
+       ino = lafs_new_inode(fs, LAFSI(dir)->filesys, dir,
                             TypeSymlink, 0, 0666, &inodb);
        if (IS_ERR(ino))
                return PTR_ERR(ino);
@@ -1208,7 +1208,7 @@ lafs_mkdir(struct inode *dir, struct dentry *de, int mode)
        if (dir->i_nlink >= LAFS_MAX_LINKS)
                return -EMLINK;
 
-       ino = lafs_new_inode(fs, dir->i_sb, dir,
+       ino = lafs_new_inode(fs, LAFSI(dir)->filesys, dir,
                             TypeDir, 0, mode, &inodb);
        if (IS_ERR(ino))
                return PTR_ERR(ino);
@@ -1285,7 +1285,7 @@ lafs_mknod(struct inode *dir, struct dentry *de, int mode,
        default:
                return -EINVAL;
        }
-       ino = lafs_new_inode(fs, dir->i_sb, dir,
+       ino = lafs_new_inode(fs, LAFSI(dir)->filesys, dir,
                             type, 0, mode, &inodb);
        if (IS_ERR(ino))
                return PTR_ERR(ino);
diff --git a/inode.c b/inode.c
index 7605323f094998ca68bad98a87863db2330ee00a..69df4d038fb21c6d94fafc70213a6a1665875e31 100644 (file)
--- a/inode.c
+++ b/inode.c
@@ -881,7 +881,7 @@ void lafs_clear_inode(struct inode *ino)
        /* FIXME release quota inodes if filesystem */
 }
 
-static int inode_map_free(struct fs *fs, struct super_block *sb, u32 inum);
+static int inode_map_free(struct fs *fs, struct inode *fsys, u32 inum);
 
 void lafs_delete_inode(struct inode *ino)
 {
@@ -917,7 +917,7 @@ void lafs_delete_inode(struct inode *ino)
                dprintk("PUNCH hole for %d\n", (int)b->b.fileaddr);
                putdref(b, MKREF(delete_inode));
        }
-       inode_map_free(fs, ino->i_sb,  ino->i_ino);
+       inode_map_free(fs, LAFSI(ino)->filesys,  ino->i_ino);
 
        clear_inode(ino);
 }
@@ -1552,10 +1552,10 @@ void lafs_inode_fillblock(struct inode *ino)
  */
 
 static int
-choose_free_inum(struct fs *fs, struct super_block *sb, u32 *inump,
+choose_free_inum(struct fs *fs, struct inode *fsys, u32 *inump,
                 struct datablock **bp, int *restarted)
 {
-       struct inode *im = lafs_iget(ino_from_sb(sb), 1, SYNC);
+       struct inode *im = lafs_iget(fsys, 1, SYNC);
        loff_t bnum;
        struct datablock *b;
        char *buf;
@@ -1681,7 +1681,7 @@ struct inode_map_new_info {
 };
 
 static int
-inode_map_new_prepare(struct fs *fs, int inum, struct super_block *sb,
+inode_map_new_prepare(struct fs *fs, int inum, struct inode *fsys,
                      struct inode_map_new_info *imni)
 {
        int choice = inum;
@@ -1693,12 +1693,12 @@ inode_map_new_prepare(struct fs *fs, int inum, struct super_block *sb,
 retry:
        if (inum == 0)
                /* choose a possibly-free inode number */
-               err = choose_free_inum(fs, sb, &choice,
+               err = choose_free_inum(fs, fsys, &choice,
                                       &imni->mb, &restarted);
        if (err)
                return err;
 
-       b = lafs_get_block(ino_from_sb(sb), choice, NULL, GFP_KERNEL,
+       b = lafs_get_block(fsys, choice, NULL, GFP_KERNEL,
                           MKREF(cfi_ino));
        if (!b)
                return -ENOMEM;
@@ -1780,7 +1780,7 @@ inode_map_new_abort(struct inode_map_new_info *imni)
 }
 
 struct inode *
-lafs_new_inode(struct fs *fs, struct super_block *sb, struct inode *dir,
+lafs_new_inode(struct fs *fs, struct inode *fsys, struct inode *dir,
               int type, int inum, int mode, struct datablock **inodbp)
 {
        /* allocate and instantiate a new inode.  If inum is non-zero,
@@ -1798,7 +1798,7 @@ lafs_new_inode(struct fs *fs, struct super_block *sb, struct inode *dir,
        struct update_handle ui;
        int err;
 
-       err = inode_map_new_prepare(fs, inum, sb, &imni);
+       err = inode_map_new_prepare(fs, inum, fsys, &imni);
        err = lafs_cluster_update_prepare(&ui, fs, sizeof(struct la_inode))
                ?: err;
        if (err == 0)
@@ -1826,7 +1826,7 @@ retry:
        lafs_iounlock_block(&b->b);
 
        inode_map_new_commit(&imni);
-       ino = lafs_iget(ino_from_sb(sb), b->b.fileaddr, SYNC);
+       ino = lafs_iget(fsys, b->b.fileaddr, SYNC);
        if (IS_ERR(ino)) {
                lafs_cluster_update_abort(&ui);
                LAFS_BUG(1, &b->b);
@@ -1853,9 +1853,9 @@ abort:
        return ERR_PTR(err);
 }
 
-static int inode_map_free(struct fs *fs, struct super_block *sb, u32 inum)
+static int inode_map_free(struct fs *fs, struct inode *fsys, u32 inum)
 {
-       struct inode *im = lafs_iget(ino_from_sb(sb), 1, SYNC);
+       struct inode *im = lafs_iget(fsys, 1, SYNC);
        int bit;
        unsigned long *buf;
        struct datablock *b;
@@ -1864,8 +1864,8 @@ static int inode_map_free(struct fs *fs, struct super_block *sb, u32 inum)
 
        mutex_lock_nested(&im->i_mutex, I_MUTEX_QUOTA);
 
-       bnum = inum >> (3 + sb->s_blocksize_bits);
-       bit = inum - (bnum << (3 + sb->s_blocksize_bits));
+       bnum = inum >> (3 + fs->blocksize_bits);
+       bit = inum - (bnum << (3 + fs->blocksize_bits));
        b = lafs_get_block(im, bnum, NULL, GFP_KERNEL, MKREF(inode_map_free));
        if (!b) {
                mutex_unlock(&im->i_mutex);
@@ -1901,12 +1901,12 @@ retry:
        return 0;
 }
 
-int lafs_inode_inuse(struct fs *fs, struct super_block *sb, u32 inum)
+int lafs_inode_inuse(struct fs *fs, struct inode *fsys, u32 inum)
 {
        /* This is used during roll-forward to register a newly created
         * inode in the inode map
         */
-       struct inode *im = lafs_iget(ino_from_sb(sb), 1, SYNC);
+       struct inode *im = lafs_iget(fsys, 1, SYNC);
        int bit;
        unsigned long *buf;
        struct datablock *b;
@@ -1915,8 +1915,8 @@ int lafs_inode_inuse(struct fs *fs, struct super_block *sb, u32 inum)
 
        mutex_lock_nested(&im->i_mutex, I_MUTEX_QUOTA);
 
-       bnum = inum >> (3 + sb->s_blocksize_bits);
-       bit = inum - (bnum << (3 + sb->s_blocksize_bits));
+       bnum = inum >> (3 + fs->blocksize_bits);
+       bit = inum - (bnum << (3 + fs->blocksize_bits));
        if (bnum > LAFSI(im)->md.inodemap.size) {
                /* inum to unbelievably big */
                mutex_unlock(&im->i_mutex);
diff --git a/lafs.h b/lafs.h
index 5b1afbf2bbca7f9d3b24e60ea5b72ee66bb976fe..70a25d0b40bb9ad7309c33ed09208f8d762bb24b 100644 (file)
--- a/lafs.h
+++ b/lafs.h
@@ -146,7 +146,7 @@ void lafs_clear_inode(struct inode *ino);
 void lafs_delete_inode(struct inode *ino);
 void lafs_dirty_inode(struct inode *ino);
 int lafs_sync_inode(struct inode *ino, int wait);
-struct inode *lafs_new_inode(struct fs *fs, struct super_block *sb,
+struct inode *lafs_new_inode(struct fs *fs, struct inode *fsys,
                             struct inode *dir, int type,
                             int inum, int mode, struct datablock **inodbp);
 int lafs_lock_inode(struct inode *ino);
@@ -154,7 +154,7 @@ void lafs_inode_fillblock(struct inode *ino);
 struct datablock *lafs_inode_dblock(struct inode *ino, int async, REFARG);
 struct datablock *lafs_inode_get_dblock(struct inode *ino, REFARG);
 int lafs_inode_handle_orphan(struct datablock *b);
-int lafs_inode_inuse(struct fs *fs, struct super_block *sb, u32 inum);
+int lafs_inode_inuse(struct fs *fs, struct inode *fsys, u32 inum);
 
 static inline void lafs_iput_fs(struct inode *ino)
 {
diff --git a/roll.c b/roll.c
index 063960685ad40a86a961712e4bb4937590c835d2..6ffe3e545263ed57f61be8b40892fd58ca054ead 100644 (file)
--- a/roll.c
+++ b/roll.c
@@ -307,7 +307,7 @@ roll_mini(struct fs *fs, int fsnum, int inum, int trunc,
                        db = lafs_get_block(fsinode, bnum, NULL, GFP_KERNEL,
                                            MKREF(roll));
                        sb = lafs_get_subset_sb(fsinode);
-                       lafs_inode_inuse(fs, sb, bnum);
+                       lafs_inode_inuse(fs, fsinode, bnum);
                        deactivate_super(sb);
                        lafs_iput_fs(fsinode);
                        if (!db)
diff --git a/super.c b/super.c
index 46e8eecdb4de9af5f925ddaf0d560a718afd50b4..6156c9644e6c60a958ca394e9fc28a0ce62722d3 100644 (file)
--- a/super.c
+++ b/super.c
@@ -1036,7 +1036,7 @@ struct super_block *lafs_get_subset_sb(struct inode *ino)
                sb->s_time_gran = 2;
                rootdir = lafs_iget(ino, 2, SYNC);
                if (IS_ERR(rootdir) && PTR_ERR(rootdir) == -ENOENT) {
-                       rootdir = lafs_new_inode(fs, sb, NULL,
+                       rootdir = lafs_new_inode(fs, ino, NULL,
                                                 TypeDir, 2, 0755, NULL);
                        /* FIXME could the inode get written before we set
                         * the link count ??*/
@@ -1048,7 +1048,7 @@ struct super_block *lafs_get_subset_sb(struct inode *ino)
                        sb->s_root = d_alloc_root(rootdir);
                        imapfile = lafs_iget(ino, 1, SYNC);
                        if (IS_ERR(imapfile) && PTR_ERR(imapfile) == -ENOENT)
-                               imapfile = lafs_new_inode(fs, sb, NULL,
+                               imapfile = lafs_new_inode(fs, ino, NULL,
                                                          TypeInodeMap, 1, 0, NULL);
 
                        if (IS_ERR(imapfile))
@@ -1265,9 +1265,10 @@ static void __exit lafs_exit(void)
 static struct inode *lafs_nfs_get_inode(struct super_block *sb,
                                        u64 ino, u32 generation)
 {
+       struct fs *fs = fs_from_sb(sb);
        struct inode *inode;
 
-       inode = lafs_iget(ino_from_sb(sb), ino, SYNC);
+       inode = lafs_iget(fs->ss[0].root, ino, SYNC);
        if (IS_ERR(inode))
                return ERR_CAST(inode);
        if (generation && inode->i_generation != generation) {