diff options
author | Nick Piggin <nickpiggin@yahoo.com.au> | 2006-01-08 04:02:19 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-08 23:13:48 -0500 |
commit | 095975da26dba21698582e91e96be10f7417333f (patch) | |
tree | ce1ffac556d394ef56a18faa97d38f79b07f31e2 /fs/file_table.c | |
parent | a57004e1afb6ee03c509f1b1ec74a000682ab93b (diff) |
[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>
Diffstat (limited to 'fs/file_table.c')
-rw-r--r-- | fs/file_table.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/file_table.c b/fs/file_table.c index c3a5e2fd663b..6142250104a6 100644 --- a/fs/file_table.c +++ b/fs/file_table.c | |||
@@ -117,7 +117,7 @@ EXPORT_SYMBOL(get_empty_filp); | |||
117 | 117 | ||
118 | void fastcall fput(struct file *file) | 118 | void fastcall fput(struct file *file) |
119 | { | 119 | { |
120 | if (rcuref_dec_and_test(&file->f_count)) | 120 | if (atomic_dec_and_test(&file->f_count)) |
121 | __fput(file); | 121 | __fput(file); |
122 | } | 122 | } |
123 | 123 | ||
@@ -166,7 +166,7 @@ struct file fastcall *fget(unsigned int fd) | |||
166 | rcu_read_lock(); | 166 | rcu_read_lock(); |
167 | file = fcheck_files(files, fd); | 167 | file = fcheck_files(files, fd); |
168 | if (file) { | 168 | if (file) { |
169 | if (!rcuref_inc_lf(&file->f_count)) { | 169 | if (!atomic_inc_not_zero(&file->f_count)) { |
170 | /* File object ref couldn't be taken */ | 170 | /* File object ref couldn't be taken */ |
171 | rcu_read_unlock(); | 171 | rcu_read_unlock(); |
172 | return NULL; | 172 | return NULL; |
@@ -198,7 +198,7 @@ struct file fastcall *fget_light(unsigned int fd, int *fput_needed) | |||
198 | rcu_read_lock(); | 198 | rcu_read_lock(); |
199 | file = fcheck_files(files, fd); | 199 | file = fcheck_files(files, fd); |
200 | if (file) { | 200 | if (file) { |
201 | if (rcuref_inc_lf(&file->f_count)) | 201 | if (atomic_inc_not_zero(&file->f_count)) |
202 | *fput_needed = 1; | 202 | *fput_needed = 1; |
203 | else | 203 | else |
204 | /* Didn't get the reference, someone's freed */ | 204 | /* Didn't get the reference, someone's freed */ |
@@ -213,7 +213,7 @@ struct file fastcall *fget_light(unsigned int fd, int *fput_needed) | |||
213 | 213 | ||
214 | void put_filp(struct file *file) | 214 | void put_filp(struct file *file) |
215 | { | 215 | { |
216 | if (rcuref_dec_and_test(&file->f_count)) { | 216 | if (atomic_dec_and_test(&file->f_count)) { |
217 | security_file_free(file); | 217 | security_file_free(file); |
218 | file_kill(file); | 218 | file_kill(file); |
219 | file_free(file); | 219 | file_free(file); |