diff options
Diffstat (limited to 'fs/locks.c')
| -rw-r--r-- | fs/locks.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/locks.c b/fs/locks.c index c2c09b4798d6..f7daa5f48949 100644 --- a/fs/locks.c +++ b/fs/locks.c | |||
| @@ -124,6 +124,7 @@ | |||
| 124 | #include <linux/smp_lock.h> | 124 | #include <linux/smp_lock.h> |
| 125 | #include <linux/syscalls.h> | 125 | #include <linux/syscalls.h> |
| 126 | #include <linux/time.h> | 126 | #include <linux/time.h> |
| 127 | #include <linux/rcupdate.h> | ||
| 127 | 128 | ||
| 128 | #include <asm/semaphore.h> | 129 | #include <asm/semaphore.h> |
| 129 | #include <asm/uaccess.h> | 130 | #include <asm/uaccess.h> |
| @@ -2205,6 +2206,7 @@ void steal_locks(fl_owner_t from) | |||
| 2205 | 2206 | ||
| 2206 | lock_kernel(); | 2207 | lock_kernel(); |
| 2207 | j = 0; | 2208 | j = 0; |
| 2209 | rcu_read_lock(); | ||
| 2208 | fdt = files_fdtable(files); | 2210 | fdt = files_fdtable(files); |
| 2209 | for (;;) { | 2211 | for (;;) { |
| 2210 | unsigned long set; | 2212 | unsigned long set; |
| @@ -2222,6 +2224,7 @@ void steal_locks(fl_owner_t from) | |||
| 2222 | set >>= 1; | 2224 | set >>= 1; |
| 2223 | } | 2225 | } |
| 2224 | } | 2226 | } |
| 2227 | rcu_read_unlock(); | ||
| 2225 | unlock_kernel(); | 2228 | unlock_kernel(); |
| 2226 | } | 2229 | } |
| 2227 | EXPORT_SYMBOL(steal_locks); | 2230 | EXPORT_SYMBOL(steal_locks); |
