Commit e8cff84f authored by Al Viro's avatar Al Viro

fold security_file_free() into file_free()

.. and the call of file_free() in case of security_file_alloc() failure
in get_empty_filp() should be simply file_free_rcu() - no point in
rcu-delays there, anyway.
Acked-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent c7e9075f
...@@ -51,6 +51,7 @@ static void file_free_rcu(struct rcu_head *head) ...@@ -51,6 +51,7 @@ static void file_free_rcu(struct rcu_head *head)
static inline void file_free(struct file *f) static inline void file_free(struct file *f)
{ {
security_file_free(f);
percpu_counter_dec(&nr_files); percpu_counter_dec(&nr_files);
call_rcu(&f->f_u.fu_rcuhead, file_free_rcu); call_rcu(&f->f_u.fu_rcuhead, file_free_rcu);
} }
...@@ -123,11 +124,10 @@ struct file *get_empty_filp(void) ...@@ -123,11 +124,10 @@ struct file *get_empty_filp(void)
if (unlikely(!f)) if (unlikely(!f))
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
percpu_counter_inc(&nr_files);
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(f); file_free_rcu(&f->f_u.fu_rcuhead);
return ERR_PTR(error); return ERR_PTR(error);
} }
...@@ -137,6 +137,7 @@ struct file *get_empty_filp(void) ...@@ -137,6 +137,7 @@ struct file *get_empty_filp(void)
mutex_init(&f->f_pos_lock); mutex_init(&f->f_pos_lock);
eventpoll_init_file(f); eventpoll_init_file(f);
/* f->f_version: 0 */ /* f->f_version: 0 */
percpu_counter_inc(&nr_files);
return f; return f;
over: over:
...@@ -207,7 +208,6 @@ static void __fput(struct file *file) ...@@ -207,7 +208,6 @@ static void __fput(struct file *file)
} }
if (file->f_op->release) if (file->f_op->release)
file->f_op->release(inode, file); file->f_op->release(inode, file);
security_file_free(file);
if (unlikely(S_ISCHR(inode->i_mode) && inode->i_cdev != NULL && if (unlikely(S_ISCHR(inode->i_mode) && inode->i_cdev != NULL &&
!(file->f_mode & FMODE_PATH))) { !(file->f_mode & FMODE_PATH))) {
cdev_put(inode->i_cdev); cdev_put(inode->i_cdev);
...@@ -302,10 +302,8 @@ EXPORT_SYMBOL(fput); ...@@ -302,10 +302,8 @@ EXPORT_SYMBOL(fput);
void put_filp(struct file *file) void put_filp(struct file *file)
{ {
if (atomic_long_dec_and_test(&file->f_count)) { if (atomic_long_dec_and_test(&file->f_count))
security_file_free(file);
file_free(file); file_free(file);
}
} }
void __init files_init(void) void __init files_init(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment