fs/ntfs3: Redesign ntfs_create_inode to return error code instead of inode
As Al Viro correctly pointed out, there is no need to return the whole structure to check the error. https://lore.kernel.org/ntfs3/20240322023515.GK538574@ZenIV/ Acked-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
This commit is contained in:
parent
1997cdc3e7
commit
c935c66878
@ -1216,11 +1216,10 @@ out:
|
||||
*
|
||||
* NOTE: if fnd != NULL (ntfs_atomic_open) then @dir is locked
|
||||
*/
|
||||
struct inode *ntfs_create_inode(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry,
|
||||
const struct cpu_str *uni, umode_t mode,
|
||||
dev_t dev, const char *symname, u32 size,
|
||||
struct ntfs_fnd *fnd)
|
||||
int ntfs_create_inode(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, const struct cpu_str *uni,
|
||||
umode_t mode, dev_t dev, const char *symname, u32 size,
|
||||
struct ntfs_fnd *fnd)
|
||||
{
|
||||
int err;
|
||||
struct super_block *sb = dir->i_sb;
|
||||
@ -1245,6 +1244,9 @@ struct inode *ntfs_create_inode(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct REPARSE_DATA_BUFFER *rp = NULL;
|
||||
bool rp_inserted = false;
|
||||
|
||||
/* New file will be resident or non resident. */
|
||||
const bool new_file_resident = 1;
|
||||
|
||||
if (!fnd)
|
||||
ni_lock_dir(dir_ni);
|
||||
|
||||
@ -1484,7 +1486,7 @@ struct inode *ntfs_create_inode(struct mnt_idmap *idmap, struct inode *dir,
|
||||
attr->size = cpu_to_le32(SIZEOF_RESIDENT);
|
||||
attr->name_off = SIZEOF_RESIDENT_LE;
|
||||
attr->res.data_off = SIZEOF_RESIDENT_LE;
|
||||
} else if (S_ISREG(mode)) {
|
||||
} else if (!new_file_resident && S_ISREG(mode)) {
|
||||
/*
|
||||
* Regular file. Create empty non resident data attribute.
|
||||
*/
|
||||
@ -1721,12 +1723,10 @@ out1:
|
||||
if (!fnd)
|
||||
ni_unlock(dir_ni);
|
||||
|
||||
if (err)
|
||||
return ERR_PTR(err);
|
||||
if (!err)
|
||||
unlock_new_inode(inode);
|
||||
|
||||
unlock_new_inode(inode);
|
||||
|
||||
return inode;
|
||||
return err;
|
||||
}
|
||||
|
||||
int ntfs_link_inode(struct inode *inode, struct dentry *dentry)
|
||||
|
@ -107,12 +107,8 @@ static struct dentry *ntfs_lookup(struct inode *dir, struct dentry *dentry,
|
||||
static int ntfs_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode, bool excl)
|
||||
{
|
||||
struct inode *inode;
|
||||
|
||||
inode = ntfs_create_inode(idmap, dir, dentry, NULL, S_IFREG | mode, 0,
|
||||
NULL, 0, NULL);
|
||||
|
||||
return IS_ERR(inode) ? PTR_ERR(inode) : 0;
|
||||
return ntfs_create_inode(idmap, dir, dentry, NULL, S_IFREG | mode, 0,
|
||||
NULL, 0, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -123,12 +119,8 @@ static int ntfs_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
static int ntfs_mknod(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode, dev_t rdev)
|
||||
{
|
||||
struct inode *inode;
|
||||
|
||||
inode = ntfs_create_inode(idmap, dir, dentry, NULL, mode, rdev, NULL, 0,
|
||||
NULL);
|
||||
|
||||
return IS_ERR(inode) ? PTR_ERR(inode) : 0;
|
||||
return ntfs_create_inode(idmap, dir, dentry, NULL, mode, rdev, NULL, 0,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -200,15 +192,12 @@ static int ntfs_symlink(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, const char *symname)
|
||||
{
|
||||
u32 size = strlen(symname);
|
||||
struct inode *inode;
|
||||
|
||||
if (unlikely(ntfs3_forced_shutdown(dir->i_sb)))
|
||||
return -EIO;
|
||||
|
||||
inode = ntfs_create_inode(idmap, dir, dentry, NULL, S_IFLNK | 0777, 0,
|
||||
symname, size, NULL);
|
||||
|
||||
return IS_ERR(inode) ? PTR_ERR(inode) : 0;
|
||||
return ntfs_create_inode(idmap, dir, dentry, NULL, S_IFLNK | 0777, 0,
|
||||
symname, size, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -217,12 +206,8 @@ static int ntfs_symlink(struct mnt_idmap *idmap, struct inode *dir,
|
||||
static int ntfs_mkdir(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
struct inode *inode;
|
||||
|
||||
inode = ntfs_create_inode(idmap, dir, dentry, NULL, S_IFDIR | mode, 0,
|
||||
NULL, 0, NULL);
|
||||
|
||||
return IS_ERR(inode) ? PTR_ERR(inode) : 0;
|
||||
return ntfs_create_inode(idmap, dir, dentry, NULL, S_IFDIR | mode, 0,
|
||||
NULL, 0, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -714,11 +714,10 @@ int ntfs_sync_inode(struct inode *inode);
|
||||
int ntfs_flush_inodes(struct super_block *sb, struct inode *i1,
|
||||
struct inode *i2);
|
||||
int inode_write_data(struct inode *inode, const void *data, size_t bytes);
|
||||
struct inode *ntfs_create_inode(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry,
|
||||
const struct cpu_str *uni, umode_t mode,
|
||||
dev_t dev, const char *symname, u32 size,
|
||||
struct ntfs_fnd *fnd);
|
||||
int ntfs_create_inode(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, const struct cpu_str *uni,
|
||||
umode_t mode, dev_t dev, const char *symname, u32 size,
|
||||
struct ntfs_fnd *fnd);
|
||||
int ntfs_link_inode(struct inode *inode, struct dentry *dentry);
|
||||
int ntfs_unlink_inode(struct inode *dir, const struct dentry *dentry);
|
||||
void ntfs_evict_inode(struct inode *inode);
|
||||
|
Loading…
Reference in New Issue
Block a user