mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 03:24:45 +01:00
simplify the callers of file_open_name()
It accepts ERR_PTR() for name and does the right thing in that case. That allows to simplify the logics in callers, making them trivial to switch to CLASS(filename). Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
151e3257d6
commit
47b3b9bf93
4 changed files with 9 additions and 41 deletions
10
fs/open.c
10
fs/open.c
|
|
@ -1398,14 +1398,8 @@ struct file *file_open_name(struct filename *name, int flags, umode_t mode)
|
|||
*/
|
||||
struct file *filp_open(const char *filename, int flags, umode_t mode)
|
||||
{
|
||||
struct filename *name = getname_kernel(filename);
|
||||
struct file *file = ERR_CAST(name);
|
||||
|
||||
if (!IS_ERR(name)) {
|
||||
file = file_open_name(name, flags, mode);
|
||||
putname(name);
|
||||
}
|
||||
return file;
|
||||
CLASS(filename_kernel, name)(filename);
|
||||
return file_open_name(name, flags, mode);
|
||||
}
|
||||
EXPORT_SYMBOL(filp_open);
|
||||
|
||||
|
|
|
|||
|
|
@ -218,7 +218,6 @@ static int acct_on(const char __user *name)
|
|||
/* Difference from BSD - they don't do O_APPEND */
|
||||
const int open_flags = O_WRONLY|O_APPEND|O_LARGEFILE;
|
||||
struct pid_namespace *ns = task_active_pid_ns(current);
|
||||
struct filename *pathname __free(putname) = getname(name);
|
||||
struct file *original_file __free(fput) = NULL; // in that order
|
||||
struct path internal __free(path_put) = {}; // in that order
|
||||
struct file *file __free(fput_sync) = NULL; // in that order
|
||||
|
|
@ -226,8 +225,7 @@ static int acct_on(const char __user *name)
|
|||
struct vfsmount *mnt;
|
||||
struct fs_pin *old;
|
||||
|
||||
if (IS_ERR(pathname))
|
||||
return PTR_ERR(pathname);
|
||||
CLASS(filename, pathname)(name);
|
||||
original_file = file_open_name(pathname, open_flags, 0);
|
||||
if (IS_ERR(original_file))
|
||||
return PTR_ERR(original_file);
|
||||
|
|
|
|||
|
|
@ -4692,23 +4692,18 @@ static int split_huge_pages_in_file(const char *file_path, pgoff_t off_start,
|
|||
pgoff_t off_end, unsigned int new_order,
|
||||
long in_folio_offset)
|
||||
{
|
||||
struct filename *file;
|
||||
struct file *candidate;
|
||||
struct address_space *mapping;
|
||||
int ret = -EINVAL;
|
||||
pgoff_t index;
|
||||
int nr_pages = 1;
|
||||
unsigned long total = 0, split = 0;
|
||||
unsigned int min_order;
|
||||
unsigned int target_order;
|
||||
|
||||
file = getname_kernel(file_path);
|
||||
if (IS_ERR(file))
|
||||
return ret;
|
||||
|
||||
CLASS(filename_kernel, file)(file_path);
|
||||
candidate = file_open_name(file, O_RDONLY, 0);
|
||||
if (IS_ERR(candidate))
|
||||
goto out;
|
||||
return -EINVAL;
|
||||
|
||||
pr_debug("split file-backed THPs in file: %s, page offset: [0x%lx - 0x%lx], new_order: %u, in_folio_offset: %ld\n",
|
||||
file_path, off_start, off_end, new_order, in_folio_offset);
|
||||
|
|
@ -4757,12 +4752,8 @@ next:
|
|||
}
|
||||
|
||||
filp_close(candidate, NULL);
|
||||
ret = 0;
|
||||
|
||||
pr_debug("%lu of %lu file-backed THP split\n", split, total);
|
||||
out:
|
||||
putname(file);
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define MAX_INPUT_BUF_SZ 255
|
||||
|
|
|
|||
|
|
@ -2831,7 +2831,6 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)
|
|||
struct file *swap_file, *victim;
|
||||
struct address_space *mapping;
|
||||
struct inode *inode;
|
||||
struct filename *pathname;
|
||||
unsigned int maxpages;
|
||||
int err, found = 0;
|
||||
|
||||
|
|
@ -2840,14 +2839,10 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)
|
|||
|
||||
BUG_ON(!current->mm);
|
||||
|
||||
pathname = getname(specialfile);
|
||||
if (IS_ERR(pathname))
|
||||
return PTR_ERR(pathname);
|
||||
|
||||
CLASS(filename, pathname)(specialfile);
|
||||
victim = file_open_name(pathname, O_RDWR|O_LARGEFILE, 0);
|
||||
err = PTR_ERR(victim);
|
||||
if (IS_ERR(victim))
|
||||
goto out;
|
||||
return PTR_ERR(victim);
|
||||
|
||||
mapping = victim->f_mapping;
|
||||
spin_lock(&swap_lock);
|
||||
|
|
@ -2964,8 +2959,6 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)
|
|||
|
||||
out_dput:
|
||||
filp_close(victim, NULL);
|
||||
out:
|
||||
putname(pathname);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
@ -3392,7 +3385,6 @@ err:
|
|||
SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
|
||||
{
|
||||
struct swap_info_struct *si;
|
||||
struct filename *name;
|
||||
struct file *swap_file = NULL;
|
||||
struct address_space *mapping;
|
||||
struct dentry *dentry;
|
||||
|
|
@ -3422,12 +3414,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
|
|||
INIT_WORK(&si->discard_work, swap_discard_work);
|
||||
INIT_WORK(&si->reclaim_work, swap_reclaim_work);
|
||||
|
||||
name = getname(specialfile);
|
||||
if (IS_ERR(name)) {
|
||||
error = PTR_ERR(name);
|
||||
name = NULL;
|
||||
goto bad_swap;
|
||||
}
|
||||
CLASS(filename, name)(specialfile);
|
||||
swap_file = file_open_name(name, O_RDWR | O_LARGEFILE | O_EXCL, 0);
|
||||
if (IS_ERR(swap_file)) {
|
||||
error = PTR_ERR(swap_file);
|
||||
|
|
@ -3635,8 +3622,6 @@ bad_swap:
|
|||
out:
|
||||
if (!IS_ERR_OR_NULL(folio))
|
||||
folio_release_kmap(folio, swap_header);
|
||||
if (name)
|
||||
putname(name);
|
||||
if (inode)
|
||||
inode_unlock(inode);
|
||||
return error;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue