diff options
Diffstat (limited to 'Documentation/filesystems/Locking')
| -rw-r--r-- | Documentation/filesystems/Locking | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index 680fb566b928..8362860e21a7 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking | |||
| @@ -144,8 +144,8 @@ prototypes: | |||
| 144 | void (*kill_sb) (struct super_block *); | 144 | void (*kill_sb) (struct super_block *); |
| 145 | locking rules: | 145 | locking rules: |
| 146 | may block BKL | 146 | may block BKL |
| 147 | get_sb yes yes | 147 | get_sb yes no |
| 148 | kill_sb yes yes | 148 | kill_sb yes no |
| 149 | 149 | ||
| 150 | ->get_sb() returns error or 0 with locked superblock attached to the vfsmount | 150 | ->get_sb() returns error or 0 with locked superblock attached to the vfsmount |
| 151 | (exclusive on ->s_umount). | 151 | (exclusive on ->s_umount). |
| @@ -409,12 +409,12 @@ ioctl: yes (see below) | |||
| 409 | unlocked_ioctl: no (see below) | 409 | unlocked_ioctl: no (see below) |
| 410 | compat_ioctl: no | 410 | compat_ioctl: no |
| 411 | mmap: no | 411 | mmap: no |
| 412 | open: maybe (see below) | 412 | open: no |
| 413 | flush: no | 413 | flush: no |
| 414 | release: no | 414 | release: no |
| 415 | fsync: no (see below) | 415 | fsync: no (see below) |
| 416 | aio_fsync: no | 416 | aio_fsync: no |
| 417 | fasync: yes (see below) | 417 | fasync: no |
| 418 | lock: yes | 418 | lock: yes |
| 419 | readv: no | 419 | readv: no |
| 420 | writev: no | 420 | writev: no |
| @@ -431,13 +431,6 @@ For many filesystems, it is probably safe to acquire the inode | |||
| 431 | semaphore. Note some filesystems (i.e. remote ones) provide no | 431 | semaphore. Note some filesystems (i.e. remote ones) provide no |
| 432 | protection for i_size so you will need to use the BKL. | 432 | protection for i_size so you will need to use the BKL. |
| 433 | 433 | ||
| 434 | ->open() locking is in-transit: big lock partially moved into the methods. | ||
| 435 | The only exception is ->open() in the instances of file_operations that never | ||
| 436 | end up in ->i_fop/->proc_fops, i.e. ones that belong to character devices | ||
| 437 | (chrdev_open() takes lock before replacing ->f_op and calling the secondary | ||
| 438 | method. As soon as we fix the handling of module reference counters all | ||
| 439 | instances of ->open() will be called without the BKL. | ||
| 440 | |||
| 441 | Note: ext2_release() was *the* source of contention on fs-intensive | 434 | Note: ext2_release() was *the* source of contention on fs-intensive |
| 442 | loads and dropping BKL on ->release() helps to get rid of that (we still | 435 | loads and dropping BKL on ->release() helps to get rid of that (we still |
| 443 | grab BKL for cases when we close a file that had been opened r/w, but that | 436 | grab BKL for cases when we close a file that had been opened r/w, but that |
