mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 14:50:19 +00:00
fs: move kmem_cache_zalloc() into alloc_empty_file*() helpers
Use a common helper init_file() instead of __alloc_file() for alloc_empty_file*() helpers and improrve the documentation. This is needed for a follow up patch that allocates a backing_file container. Suggested-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Amir Goldstein <amir73il@gmail.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Message-Id: <20230615112229.2143178-4-amir73il@gmail.com> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
cbb0b9d4bb
commit
8a05a8c31d
@ -131,20 +131,15 @@ static int __init init_fs_stat_sysctls(void)
|
|||||||
fs_initcall(init_fs_stat_sysctls);
|
fs_initcall(init_fs_stat_sysctls);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static struct file *__alloc_file(int flags, const struct cred *cred)
|
static int init_file(struct file *f, int flags, const struct cred *cred)
|
||||||
{
|
{
|
||||||
struct file *f;
|
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
f = kmem_cache_zalloc(filp_cachep, GFP_KERNEL);
|
|
||||||
if (unlikely(!f))
|
|
||||||
return ERR_PTR(-ENOMEM);
|
|
||||||
|
|
||||||
f->f_cred = get_cred(cred);
|
f->f_cred = get_cred(cred);
|
||||||
error = security_file_alloc(f);
|
error = security_file_alloc(f);
|
||||||
if (unlikely(error)) {
|
if (unlikely(error)) {
|
||||||
file_free_rcu(&f->f_rcuhead);
|
file_free_rcu(&f->f_rcuhead);
|
||||||
return ERR_PTR(error);
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
atomic_long_set(&f->f_count, 1);
|
atomic_long_set(&f->f_count, 1);
|
||||||
@ -155,7 +150,7 @@ static struct file *__alloc_file(int flags, const struct cred *cred)
|
|||||||
f->f_mode = OPEN_FMODE(flags);
|
f->f_mode = OPEN_FMODE(flags);
|
||||||
/* f->f_version: 0 */
|
/* f->f_version: 0 */
|
||||||
|
|
||||||
return f;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find an unused file structure and return a pointer to it.
|
/* Find an unused file structure and return a pointer to it.
|
||||||
@ -172,6 +167,7 @@ struct file *alloc_empty_file(int flags, const struct cred *cred)
|
|||||||
{
|
{
|
||||||
static long old_max;
|
static long old_max;
|
||||||
struct file *f;
|
struct file *f;
|
||||||
|
int error;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Privileged users can go above max_files
|
* Privileged users can go above max_files
|
||||||
@ -185,9 +181,15 @@ struct file *alloc_empty_file(int flags, const struct cred *cred)
|
|||||||
goto over;
|
goto over;
|
||||||
}
|
}
|
||||||
|
|
||||||
f = __alloc_file(flags, cred);
|
f = kmem_cache_zalloc(filp_cachep, GFP_KERNEL);
|
||||||
if (!IS_ERR(f))
|
if (unlikely(!f))
|
||||||
percpu_counter_inc(&nr_files);
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
|
error = init_file(f, flags, cred);
|
||||||
|
if (unlikely(error))
|
||||||
|
return ERR_PTR(error);
|
||||||
|
|
||||||
|
percpu_counter_inc(&nr_files);
|
||||||
|
|
||||||
return f;
|
return f;
|
||||||
|
|
||||||
@ -203,14 +205,23 @@ over:
|
|||||||
/*
|
/*
|
||||||
* Variant of alloc_empty_file() that doesn't check and modify nr_files.
|
* Variant of alloc_empty_file() that doesn't check and modify nr_files.
|
||||||
*
|
*
|
||||||
* Should not be used unless there's a very good reason to do so.
|
* This is only for kernel internal use, and the allocate file must not be
|
||||||
|
* installed into file tables or such.
|
||||||
*/
|
*/
|
||||||
struct file *alloc_empty_file_noaccount(int flags, const struct cred *cred)
|
struct file *alloc_empty_file_noaccount(int flags, const struct cred *cred)
|
||||||
{
|
{
|
||||||
struct file *f = __alloc_file(flags, cred);
|
struct file *f;
|
||||||
|
int error;
|
||||||
|
|
||||||
if (!IS_ERR(f))
|
f = kmem_cache_zalloc(filp_cachep, GFP_KERNEL);
|
||||||
f->f_mode |= FMODE_NOACCOUNT;
|
if (unlikely(!f))
|
||||||
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
|
error = init_file(f, flags, cred);
|
||||||
|
if (unlikely(error))
|
||||||
|
return ERR_PTR(error);
|
||||||
|
|
||||||
|
f->f_mode |= FMODE_NOACCOUNT;
|
||||||
|
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user