diff options
Diffstat (limited to 'fs/locks.c')
| -rw-r--r-- | fs/locks.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/locks.c b/fs/locks.c index dda83d6cd48b..efad798824dc 100644 --- a/fs/locks.c +++ b/fs/locks.c | |||
| @@ -2230,7 +2230,12 @@ void steal_locks(fl_owner_t from) | |||
| 2230 | 2230 | ||
| 2231 | lock_kernel(); | 2231 | lock_kernel(); |
| 2232 | j = 0; | 2232 | j = 0; |
| 2233 | rcu_read_lock(); | 2233 | |
| 2234 | /* | ||
| 2235 | * We are not taking a ref to the file structures, so | ||
| 2236 | * we need to acquire ->file_lock. | ||
| 2237 | */ | ||
| 2238 | spin_lock(&files->file_lock); | ||
| 2234 | fdt = files_fdtable(files); | 2239 | fdt = files_fdtable(files); |
| 2235 | for (;;) { | 2240 | for (;;) { |
| 2236 | unsigned long set; | 2241 | unsigned long set; |
| @@ -2248,7 +2253,7 @@ void steal_locks(fl_owner_t from) | |||
| 2248 | set >>= 1; | 2253 | set >>= 1; |
| 2249 | } | 2254 | } |
| 2250 | } | 2255 | } |
| 2251 | rcu_read_unlock(); | 2256 | spin_unlock(&files->file_lock); |
| 2252 | unlock_kernel(); | 2257 | unlock_kernel(); |
| 2253 | } | 2258 | } |
| 2254 | EXPORT_SYMBOL(steal_locks); | 2259 | EXPORT_SYMBOL(steal_locks); |
