diff options
| author | Jeff Layton <jlayton@redhat.com> | 2013-06-21 08:58:20 -0400 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-06-29 04:57:46 -0400 |
| commit | 7b2296afb392bc21a50f42e7c7f4b19d3fea8c6d (patch) | |
| tree | 360a8f35cf75f0bbcd1b984a6348f4c9e715e159 /Documentation/filesystems | |
| parent | 3999e49364193f7dbbba66e2be655fe91ba1fced (diff) | |
locks: give the blocked_hash its own spinlock
There's no reason we have to protect the blocked_hash and file_lock_list
with the same spinlock. With the tests I have, breaking it in two gives
a barely measurable performance benefit, but it seems reasonable to make
this locking as granular as possible.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'Documentation/filesystems')
| -rw-r--r-- | Documentation/filesystems/Locking | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index 2db7c9e492e9..7d9ca7a83fcc 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking | |||
| @@ -357,20 +357,20 @@ prototypes: | |||
| 357 | 357 | ||
| 358 | locking rules: | 358 | locking rules: |
| 359 | 359 | ||
| 360 | inode->i_lock file_lock_lock may block | 360 | inode->i_lock blocked_lock_lock may block |
| 361 | lm_compare_owner: yes[1] maybe no | 361 | lm_compare_owner: yes[1] maybe no |
| 362 | lm_owner_key yes[1] yes no | 362 | lm_owner_key yes[1] yes no |
| 363 | lm_notify: yes yes no | 363 | lm_notify: yes yes no |
| 364 | lm_grant: no no no | 364 | lm_grant: no no no |
| 365 | lm_break: yes no no | 365 | lm_break: yes no no |
| 366 | lm_change yes no no | 366 | lm_change yes no no |
| 367 | 367 | ||
| 368 | [1]: ->lm_compare_owner and ->lm_owner_key are generally called with | 368 | [1]: ->lm_compare_owner and ->lm_owner_key are generally called with |
| 369 | *an* inode->i_lock held. It may not be the i_lock of the inode | 369 | *an* inode->i_lock held. It may not be the i_lock of the inode |
| 370 | associated with either file_lock argument! This is the case with deadlock | 370 | associated with either file_lock argument! This is the case with deadlock |
| 371 | detection, since the code has to chase down the owners of locks that may | 371 | detection, since the code has to chase down the owners of locks that may |
| 372 | be entirely unrelated to the one on which the lock is being acquired. | 372 | be entirely unrelated to the one on which the lock is being acquired. |
| 373 | For deadlock detection however, the file_lock_lock is also held. The | 373 | For deadlock detection however, the blocked_lock_lock is also held. The |
| 374 | fact that these locks are held ensures that the file_locks do not | 374 | fact that these locks are held ensures that the file_locks do not |
| 375 | disappear out from under you while doing the comparison or generating an | 375 | disappear out from under you while doing the comparison or generating an |
| 376 | owner key. | 376 | owner key. |
