From: NeilBrown Date: Wed, 11 Aug 2010 22:57:55 +0000 (+1000) Subject: Change filesys arg of lafs_new_inode to struct super_block X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=9c5c67eca05dae4d27d45366fd96698e4f3e9699;p=LaFS.git Change filesys arg of lafs_new_inode to struct super_block It is more direct in most cases to use a super_block rather than a filesys inode. Signed-off-by: NeilBrown --- diff --git a/dir.c b/dir.c index 35ca7df..4977503 100644 --- 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 14139a1..6cf9b61 100644 --- 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 51e3b3f..7d086df 100644 --- 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);