]> git.neil.brown.name Git - LaFS.git/commitdiff
Change filesys arg of lafs_new_inode to struct super_block
authorNeilBrown <neilb@suse.de>
Wed, 11 Aug 2010 22:57:55 +0000 (08:57 +1000)
committerNeilBrown <neilb@suse.de>
Wed, 11 Aug 2010 22:57:55 +0000 (08:57 +1000)
It is more direct in most cases to use a super_block rather
than a filesys inode.

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

diff --git a/dir.c b/dir.c
index 35ca7df59ac059e72d6846aead5b1217703ecf80..4977503fbfd871c53b86969d5f90d5cc1227116c 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -607,7 +607,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, LAFSI(dir)->filesys,
+       struct inode *ino = lafs_new_inode(fs, dir->i_sb,
                                           dir, TypeFile, 0, mode, &db);
        struct dirop_handle doh;
        struct update_handle uh;
@@ -894,7 +894,7 @@ lafs_symlink(struct inode *dir, struct dentry *de,
        if (l > fs->blocksize-1)
                return -ENAMETOOLONG;
 
-       ino = lafs_new_inode(fs, LAFSI(dir)->filesys, dir,
+       ino = lafs_new_inode(fs, dir->i_sb, dir,
                             TypeSymlink, 0, 0666, &inodb);
        if (IS_ERR(ino))
                return PTR_ERR(ino);
@@ -973,7 +973,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, LAFSI(dir)->filesys, dir,
+       ino = lafs_new_inode(fs, dir->i_sb, dir,
                             TypeDir, 0, mode, &inodb);
        if (IS_ERR(ino))
                return PTR_ERR(ino);
@@ -1050,7 +1050,7 @@ lafs_mknod(struct inode *dir, struct dentry *de, int mode,
        default:
                return -EINVAL;
        }
-       ino = lafs_new_inode(fs, LAFSI(dir)->filesys, dir,
+       ino = lafs_new_inode(fs, dir->i_sb, dir,
                             type, 0, mode, &inodb);
        if (IS_ERR(ino))
                return PTR_ERR(ino);
diff --git a/inode.c b/inode.c
index 14139a17cad76fa3968eda42327d149503be9272..6cf9b61f0d570641e69b20a26161b6b7dff9f012 100644 (file)
--- a/inode.c
+++ b/inode.c
@@ -614,7 +614,7 @@ void lafs_clear_inode(struct inode *ino)
        /* FIXME release quota inodes if filesystem */
 }
 
-static int inode_map_free(struct fs *fs, struct inode *filesys, u32 inum);
+static int inode_map_free(struct fs *fs, struct super_block *sb, u32 inum);
 
 void lafs_delete_inode(struct inode *ino)
 {
@@ -653,7 +653,7 @@ void lafs_delete_inode(struct inode *ino)
        set_bit(B_Claimed, &b->b.flags);
        lafs_add_orphan(fs, b);
 
-       inode_map_free(fs, LAFSI(ino)->filesys,  ino->i_ino);
+       inode_map_free(fs, ino->i_sb,  ino->i_ino);
        // FIXME what to do on error (-ENOMEM )
 
        dprintk("PUNCH hole for %d\n", (int)b->b.fileaddr);
@@ -1228,10 +1228,10 @@ void lafs_inode_fillblock(struct inode *ino)
  */
 
 static int
-choose_free_inum(struct fs *fs, struct inode *filesys, u32 *inump,
+choose_free_inum(struct fs *fs, struct super_block *sb, u32 *inump,
                 struct datablock **bp, int *restarted)
 {
-       struct inode *im = lafs_iget(filesys->i_sb, 1, SYNC);
+       struct inode *im = lafs_iget(sb, 1, SYNC);
        loff_t bnum;
        struct datablock *b;
        char *buf;
@@ -1357,7 +1357,7 @@ struct inode_map_new_info {
 };
 
 static int
-inode_map_new_prepare(struct fs *fs, int inum, struct inode *filesys,
+inode_map_new_prepare(struct fs *fs, int inum, struct super_block *sb,
                      struct inode_map_new_info *imni)
 {
        int choice = inum;
@@ -1369,12 +1369,12 @@ inode_map_new_prepare(struct fs *fs, int inum, struct inode *filesys,
 retry:
        if (inum == 0)
                /* choose a possibly-free inode number */
-               err = choose_free_inum(fs, filesys, &choice,
+               err = choose_free_inum(fs, sb, &choice,
                                       &imni->mb, &restarted);
        if (err)
                return err;
 
-       b = lafs_get_block(filesys, choice, NULL, GFP_KERNEL,
+       b = lafs_get_block(ino_from_sb(sb), choice, NULL, GFP_KERNEL,
                           MKREF(cfi_ino));
        if (!b)
                return -ENOMEM;
@@ -1455,7 +1455,7 @@ inode_map_new_abort(struct inode_map_new_info *imni)
 }
 
 struct inode *
-lafs_new_inode(struct fs *fs, struct inode *filesys, struct inode *dir,
+lafs_new_inode(struct fs *fs, struct super_block *sb, struct inode *dir,
               int type, int inum, int mode, struct datablock **inodbp)
 {
        /* allocate and instantiate a new inode.  If inum is non-zero,
@@ -1473,7 +1473,7 @@ lafs_new_inode(struct fs *fs, struct inode *filesys, struct inode *dir,
        struct update_handle ui;
        int err;
 
-       err = inode_map_new_prepare(fs, inum, filesys, &imni);
+       err = inode_map_new_prepare(fs, inum, sb, &imni);
        err = lafs_cluster_update_prepare(&ui, fs, sizeof(struct la_inode))
                ?: err;
        if (err == 0)
@@ -1501,7 +1501,7 @@ retry:
        lafs_iounlock_block(&b->b);
 
        inode_map_new_commit(&imni);
-       ino = lafs_iget(filesys->i_sb, b->b.fileaddr, SYNC);
+       ino = lafs_iget(sb, b->b.fileaddr, SYNC);
        if (IS_ERR(ino)) {
                lafs_cluster_update_abort(&ui);
                LAFS_BUG(1, &b->b);
@@ -1528,17 +1528,17 @@ abort:
        return ERR_PTR(err);
 }
 
-static int inode_map_free(struct fs *fs, struct inode *filesys, u32 inum)
+static int inode_map_free(struct fs *fs, struct super_block *sb, u32 inum)
 {
-       struct inode *im = lafs_iget(filesys->i_sb, 1, SYNC);
+       struct inode *im = lafs_iget(sb, 1, SYNC);
        int bit;
        unsigned long *buf;
        struct datablock *b;
        u32 bnum;
        int err;
 
-       bnum = inum >> (3 + filesys->i_blkbits);
-       bit = inum - (bnum << (3 + filesys->i_blkbits));
+       bnum = inum >> (3 + sb->s_blocksize_bits);
+       bit = inum - (bnum << (3 + sb->s_blocksize_bits));
        b = lafs_get_block(im, bnum, NULL, GFP_KERNEL, MKREF(inode_map_free));
        if (!b) {
                iput(im);
diff --git a/lafs.h b/lafs.h
index 51e3b3f353554c2255792e588e767a24201b7b63..7d086dfbd6f9c9b5fd5af463f4865ed8079f7f8d 100644 (file)
--- a/lafs.h
+++ b/lafs.h
@@ -144,7 +144,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 inode *filesys,
+struct inode *lafs_new_inode(struct fs *fs, struct super_block *sb,
                             struct inode *dir, int type,
                             int inum, int mode, struct datablock **inodbp);
 int lafs_lock_inode(struct inode *ino);
@@ -344,6 +344,12 @@ static inline struct fs *fs_from_sb(struct super_block *sb)
        return k->fs;
 }
 
+static inline struct inode *ino_from_sb(struct super_block *sb)
+{
+       struct sb_key *k = sb->s_fs_info;
+       return k->root;
+}
+
 static inline struct fs *fs_from_inode(struct inode *ino)
 {
        return fs_from_sb(ino->i_sb);