Loading fs/minix/bitmap.c +6 −10 Original line number Diff line number Diff line Loading @@ -210,7 +210,7 @@ void minix_free_inode(struct inode * inode) mark_buffer_dirty(bh); } struct inode *minix_new_inode(const struct inode *dir, umode_t mode, int *error) struct inode *minix_new_inode(const struct inode *dir, umode_t mode) { struct super_block *sb = dir->i_sb; struct minix_sb_info *sbi = minix_sb(sb); Loading @@ -220,13 +220,10 @@ struct inode *minix_new_inode(const struct inode *dir, umode_t mode, int *error) unsigned long j; int i; if (!inode) { *error = -ENOMEM; return NULL; } if (!inode) return ERR_PTR(-ENOMEM); j = bits_per_zone; bh = NULL; *error = -ENOSPC; spin_lock(&bitmap_lock); for (i = 0; i < sbi->s_imap_blocks; i++) { bh = sbi->s_imap[i]; Loading @@ -237,20 +234,20 @@ struct inode *minix_new_inode(const struct inode *dir, umode_t mode, int *error) if (!bh || j >= bits_per_zone) { spin_unlock(&bitmap_lock); iput(inode); return NULL; return ERR_PTR(-ENOSPC); } if (minix_test_and_set_bit(j, bh->b_data)) { /* shouldn't happen */ spin_unlock(&bitmap_lock); printk("minix_new_inode: bit already set\n"); iput(inode); return NULL; return ERR_PTR(-ENOSPC); } spin_unlock(&bitmap_lock); mark_buffer_dirty(bh); j += i * bits_per_zone; if (!j || j > sbi->s_ninodes) { iput(inode); return NULL; return ERR_PTR(-ENOSPC); } inode_init_owner(&init_user_ns, inode, dir, mode); inode->i_ino = j; Loading @@ -260,7 +257,6 @@ struct inode *minix_new_inode(const struct inode *dir, umode_t mode, int *error) insert_inode_hash(inode); mark_inode_dirty(inode); *error = 0; return inode; } Loading fs/minix/minix.h +1 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ struct minix_sb_info { extern struct inode *minix_iget(struct super_block *, unsigned long); extern struct minix_inode * minix_V1_raw_inode(struct super_block *, ino_t, struct buffer_head **); extern struct minix2_inode * minix_V2_raw_inode(struct super_block *, ino_t, struct buffer_head **); extern struct inode * minix_new_inode(const struct inode *, umode_t, int *); extern struct inode * minix_new_inode(const struct inode *, umode_t); extern void minix_free_inode(struct inode * inode); extern unsigned long minix_count_free_inodes(struct super_block *sb); extern int minix_new_block(struct inode * inode); Loading fs/minix/namei.c +29 −39 Original line number Diff line number Diff line Loading @@ -36,33 +36,31 @@ static struct dentry *minix_lookup(struct inode * dir, struct dentry *dentry, un static int minix_mknod(struct user_namespace *mnt_userns, struct inode *dir, struct dentry *dentry, umode_t mode, dev_t rdev) { int error; struct inode *inode; if (!old_valid_dev(rdev)) return -EINVAL; inode = minix_new_inode(dir, mode, &error); inode = minix_new_inode(dir, mode); if (IS_ERR(inode)) return PTR_ERR(inode); if (inode) { minix_set_inode(inode, rdev); mark_inode_dirty(inode); error = add_nondir(dentry, inode); } return error; return add_nondir(dentry, inode); } static int minix_tmpfile(struct user_namespace *mnt_userns, struct inode *dir, struct file *file, umode_t mode) { int error; struct inode *inode = minix_new_inode(dir, mode, &error); if (inode) { struct inode *inode = minix_new_inode(dir, mode); if (IS_ERR(inode)) return finish_open_simple(file, PTR_ERR(inode)); minix_set_inode(inode, 0); mark_inode_dirty(inode); d_tmpfile(file, inode); } return finish_open_simple(file, error); return finish_open_simple(file, 0); } static int minix_create(struct user_namespace *mnt_userns, struct inode *dir, Loading @@ -74,30 +72,25 @@ static int minix_create(struct user_namespace *mnt_userns, struct inode *dir, static int minix_symlink(struct user_namespace *mnt_userns, struct inode *dir, struct dentry *dentry, const char *symname) { int err = -ENAMETOOLONG; int i = strlen(symname)+1; struct inode * inode; int err; if (i > dir->i_sb->s_blocksize) goto out; return -ENAMETOOLONG; inode = minix_new_inode(dir, S_IFLNK | 0777, &err); if (!inode) goto out; inode = minix_new_inode(dir, S_IFLNK | 0777); if (IS_ERR(inode)) return PTR_ERR(inode); minix_set_inode(inode, 0); err = page_symlink(inode, symname, i); if (err) goto out_fail; err = add_nondir(dentry, inode); out: return err; out_fail: if (unlikely(err)) { inode_dec_link_count(inode); iput(inode); goto out; return err; } return add_nondir(dentry, inode); } static int minix_link(struct dentry * old_dentry, struct inode * dir, Loading @@ -117,14 +110,12 @@ static int minix_mkdir(struct user_namespace *mnt_userns, struct inode *dir, struct inode * inode; int err; inode_inc_link_count(dir); inode = minix_new_inode(dir, S_IFDIR | mode, &err); if (!inode) goto out_dir; inode = minix_new_inode(dir, S_IFDIR | mode); if (IS_ERR(inode)) return PTR_ERR(inode); inode_inc_link_count(dir); minix_set_inode(inode, 0); inode_inc_link_count(inode); err = minix_make_empty(inode, dir); Loading @@ -143,7 +134,6 @@ static int minix_mkdir(struct user_namespace *mnt_userns, struct inode *dir, inode_dec_link_count(inode); inode_dec_link_count(inode); iput(inode); out_dir: inode_dec_link_count(dir); goto out; } Loading Loading
fs/minix/bitmap.c +6 −10 Original line number Diff line number Diff line Loading @@ -210,7 +210,7 @@ void minix_free_inode(struct inode * inode) mark_buffer_dirty(bh); } struct inode *minix_new_inode(const struct inode *dir, umode_t mode, int *error) struct inode *minix_new_inode(const struct inode *dir, umode_t mode) { struct super_block *sb = dir->i_sb; struct minix_sb_info *sbi = minix_sb(sb); Loading @@ -220,13 +220,10 @@ struct inode *minix_new_inode(const struct inode *dir, umode_t mode, int *error) unsigned long j; int i; if (!inode) { *error = -ENOMEM; return NULL; } if (!inode) return ERR_PTR(-ENOMEM); j = bits_per_zone; bh = NULL; *error = -ENOSPC; spin_lock(&bitmap_lock); for (i = 0; i < sbi->s_imap_blocks; i++) { bh = sbi->s_imap[i]; Loading @@ -237,20 +234,20 @@ struct inode *minix_new_inode(const struct inode *dir, umode_t mode, int *error) if (!bh || j >= bits_per_zone) { spin_unlock(&bitmap_lock); iput(inode); return NULL; return ERR_PTR(-ENOSPC); } if (minix_test_and_set_bit(j, bh->b_data)) { /* shouldn't happen */ spin_unlock(&bitmap_lock); printk("minix_new_inode: bit already set\n"); iput(inode); return NULL; return ERR_PTR(-ENOSPC); } spin_unlock(&bitmap_lock); mark_buffer_dirty(bh); j += i * bits_per_zone; if (!j || j > sbi->s_ninodes) { iput(inode); return NULL; return ERR_PTR(-ENOSPC); } inode_init_owner(&init_user_ns, inode, dir, mode); inode->i_ino = j; Loading @@ -260,7 +257,6 @@ struct inode *minix_new_inode(const struct inode *dir, umode_t mode, int *error) insert_inode_hash(inode); mark_inode_dirty(inode); *error = 0; return inode; } Loading
fs/minix/minix.h +1 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ struct minix_sb_info { extern struct inode *minix_iget(struct super_block *, unsigned long); extern struct minix_inode * minix_V1_raw_inode(struct super_block *, ino_t, struct buffer_head **); extern struct minix2_inode * minix_V2_raw_inode(struct super_block *, ino_t, struct buffer_head **); extern struct inode * minix_new_inode(const struct inode *, umode_t, int *); extern struct inode * minix_new_inode(const struct inode *, umode_t); extern void minix_free_inode(struct inode * inode); extern unsigned long minix_count_free_inodes(struct super_block *sb); extern int minix_new_block(struct inode * inode); Loading
fs/minix/namei.c +29 −39 Original line number Diff line number Diff line Loading @@ -36,33 +36,31 @@ static struct dentry *minix_lookup(struct inode * dir, struct dentry *dentry, un static int minix_mknod(struct user_namespace *mnt_userns, struct inode *dir, struct dentry *dentry, umode_t mode, dev_t rdev) { int error; struct inode *inode; if (!old_valid_dev(rdev)) return -EINVAL; inode = minix_new_inode(dir, mode, &error); inode = minix_new_inode(dir, mode); if (IS_ERR(inode)) return PTR_ERR(inode); if (inode) { minix_set_inode(inode, rdev); mark_inode_dirty(inode); error = add_nondir(dentry, inode); } return error; return add_nondir(dentry, inode); } static int minix_tmpfile(struct user_namespace *mnt_userns, struct inode *dir, struct file *file, umode_t mode) { int error; struct inode *inode = minix_new_inode(dir, mode, &error); if (inode) { struct inode *inode = minix_new_inode(dir, mode); if (IS_ERR(inode)) return finish_open_simple(file, PTR_ERR(inode)); minix_set_inode(inode, 0); mark_inode_dirty(inode); d_tmpfile(file, inode); } return finish_open_simple(file, error); return finish_open_simple(file, 0); } static int minix_create(struct user_namespace *mnt_userns, struct inode *dir, Loading @@ -74,30 +72,25 @@ static int minix_create(struct user_namespace *mnt_userns, struct inode *dir, static int minix_symlink(struct user_namespace *mnt_userns, struct inode *dir, struct dentry *dentry, const char *symname) { int err = -ENAMETOOLONG; int i = strlen(symname)+1; struct inode * inode; int err; if (i > dir->i_sb->s_blocksize) goto out; return -ENAMETOOLONG; inode = minix_new_inode(dir, S_IFLNK | 0777, &err); if (!inode) goto out; inode = minix_new_inode(dir, S_IFLNK | 0777); if (IS_ERR(inode)) return PTR_ERR(inode); minix_set_inode(inode, 0); err = page_symlink(inode, symname, i); if (err) goto out_fail; err = add_nondir(dentry, inode); out: return err; out_fail: if (unlikely(err)) { inode_dec_link_count(inode); iput(inode); goto out; return err; } return add_nondir(dentry, inode); } static int minix_link(struct dentry * old_dentry, struct inode * dir, Loading @@ -117,14 +110,12 @@ static int minix_mkdir(struct user_namespace *mnt_userns, struct inode *dir, struct inode * inode; int err; inode_inc_link_count(dir); inode = minix_new_inode(dir, S_IFDIR | mode, &err); if (!inode) goto out_dir; inode = minix_new_inode(dir, S_IFDIR | mode); if (IS_ERR(inode)) return PTR_ERR(inode); inode_inc_link_count(dir); minix_set_inode(inode, 0); inode_inc_link_count(inode); err = minix_make_empty(inode, dir); Loading @@ -143,7 +134,6 @@ static int minix_mkdir(struct user_namespace *mnt_userns, struct inode *dir, inode_dec_link_count(inode); inode_dec_link_count(inode); iput(inode); out_dir: inode_dec_link_count(dir); goto out; } Loading