mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 08:31:13 +00:00
[PATCH] rcu file: use atomic primitives
Use atomic_inc_not_zero for rcu files instead of special case rcuref. Signed-off-by: Nick Piggin <npiggin@suse.de> Cc: "Paul E. McKenney" <paulmck@us.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
a57004e1af
commit
095975da26
9 changed files with 48 additions and 291 deletions
|
@ -117,7 +117,7 @@ EXPORT_SYMBOL(get_empty_filp);
|
|||
|
||||
void fastcall fput(struct file *file)
|
||||
{
|
||||
if (rcuref_dec_and_test(&file->f_count))
|
||||
if (atomic_dec_and_test(&file->f_count))
|
||||
__fput(file);
|
||||
}
|
||||
|
||||
|
@ -166,7 +166,7 @@ struct file fastcall *fget(unsigned int fd)
|
|||
rcu_read_lock();
|
||||
file = fcheck_files(files, fd);
|
||||
if (file) {
|
||||
if (!rcuref_inc_lf(&file->f_count)) {
|
||||
if (!atomic_inc_not_zero(&file->f_count)) {
|
||||
/* File object ref couldn't be taken */
|
||||
rcu_read_unlock();
|
||||
return NULL;
|
||||
|
@ -198,7 +198,7 @@ struct file fastcall *fget_light(unsigned int fd, int *fput_needed)
|
|||
rcu_read_lock();
|
||||
file = fcheck_files(files, fd);
|
||||
if (file) {
|
||||
if (rcuref_inc_lf(&file->f_count))
|
||||
if (atomic_inc_not_zero(&file->f_count))
|
||||
*fput_needed = 1;
|
||||
else
|
||||
/* Didn't get the reference, someone's freed */
|
||||
|
@ -213,7 +213,7 @@ struct file fastcall *fget_light(unsigned int fd, int *fput_needed)
|
|||
|
||||
void put_filp(struct file *file)
|
||||
{
|
||||
if (rcuref_dec_and_test(&file->f_count)) {
|
||||
if (atomic_dec_and_test(&file->f_count)) {
|
||||
security_file_free(file);
|
||||
file_kill(file);
|
||||
file_free(file);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue