diff options
| author | Alexander Viro <viro@parcelfarce.linux.theplanet.co.uk> | 2003-04-24 08:39:06 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2003-04-24 08:39:06 -0700 |
| commit | 91b58109a339748d992cb767e145c19722756653 (patch) | |
| tree | 7a02b8525e330f58aca6aa009a0ca9fbb40b9ce2 /include/linux/fs.h | |
| parent | 45065e1014b07ff09f279b01828bfa5d3a6eeb17 (diff) | |
[PATCH] invalidate_device()/check_disk_change() fixes
* bogus calls of invalidate_buffers() gone from floppy_open()
* invalidate_buffers() killed.
* new helper - __invalidate_device(bdev, do_sync). invalidate_device()
is calling it.
* fixed races between floppy_open()/floppy_open and
floppy_open()/set_geometry():
a) floppy_open()/floppy_release() is done under a semaphore. That
closes the races between simultaneous open() on /dev/fd0foo and /dev/fd0bar.
b) pointer to struct block_device is kept as long as floppy is
opened (per-drive, non-NULL when number of openers is non-zero, does not
contribute to block_device refcount).
c) set_geometry() grabs the same semaphore and invalidates the
devices directly instead of messing with setting fake "it had changed"
and calling __check_disk_change().
* __check_disk_change() killed - no remaining callers
* full_check_disk_change() killed - ditto.
Diffstat (limited to 'include/linux/fs.h')
| -rw-r--r-- | include/linux/fs.h | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index df578c422b25..ce89b15c54a1 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1102,9 +1102,8 @@ extern int fs_may_remount_ro(struct super_block *); #define bio_data_dir(bio) ((bio)->bi_rw & 1) extern int check_disk_change(struct block_device *); -extern int full_check_disk_change(struct block_device *); -extern int __check_disk_change(dev_t); extern int invalidate_inodes(struct super_block *); +extern int __invalidate_device(struct block_device *, int); extern int invalidate_device(kdev_t, int); unsigned long invalidate_mapping_pages(struct address_space *mapping, pgoff_t start, pgoff_t end); |
