OSDN Git Service

minix: make minix_new_inode() return error as ERR_PTR(-E...)
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 14 Dec 2022 17:57:27 +0000 (12:57 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 11 Jan 2023 20:30:08 +0000 (15:30 -0500)
adjust the callers

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/minix/bitmap.c
fs/minix/minix.h
fs/minix/namei.c

index 9115948..af50d8e 100644 (file)
@@ -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);
@@ -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];
@@ -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;
@@ -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;
 }
 
index 2021733..7158a68 100644 (file)
@@ -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);
index 8afdc40..a4f5e6c 100644 (file)
@@ -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;
+       minix_set_inode(inode, rdev);
+       mark_inode_dirty(inode);
+       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) {
-               minix_set_inode(inode, 0);
-               mark_inode_dirty(inode);
-               d_tmpfile(file, inode);
-       }
-       return finish_open_simple(file, error);
+       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, 0);
 }
 
 static int minix_create(struct user_namespace *mnt_userns, struct inode *dir,
@@ -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:
-       inode_dec_link_count(inode);
-       iput(inode);
-       goto out;
+       if (unlikely(err)) {
+               inode_dec_link_count(inode);
+               iput(inode);
+               return err;
+       }
+       return add_nondir(dentry, inode);
 }
 
 static int minix_link(struct dentry * old_dentry, struct inode * dir,
@@ -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);
@@ -143,7 +134,6 @@ out_fail:
        inode_dec_link_count(inode);
        inode_dec_link_count(inode);
        iput(inode);
-out_dir:
        inode_dec_link_count(dir);
        goto out;
 }