diff options
| author | Alexander Viro <viro@math.psu.edu> | 2002-02-27 20:23:33 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@penguin.transmeta.com> | 2002-02-27 20:23:33 -0800 |
| commit | 7155112cbcab15e2e34809c97c89907b8fa8013e (patch) | |
| tree | b5d82a5e69f94544f9f7adcee522347a3fb9e977 | |
| parent | 8a0acc94ebedbcc6459763c1b391a3f83a5e8df0 (diff) | |
[PATCH] (1/7) kdev_t removals
* new function - fsync_bdev() (analog of fsync_dev(), but takes
struct block_device * instead of kdev_t. Callers of fsync_dev()
that have struct block_device in question are using fsync_bdev()
now.
* old code for fsync_dev(NODEV) had been moved to sys_sync().
Other callers of fsync_dev(NODEV) are calling sys_sync() now.
* fsync_dev() became a wrapper fro fsync_bdev().
* sync_dev() (not used anywhere in the tree) is gone.
* i2oblock.c had fsync_dev() called in ->release(). Removed.
* s390/block/xparm.c was doing fsync_dev() on its devices in
cleanup_module(). Removed.
| -rw-r--r-- | drivers/block/amiflop.c | 2 | ||||
| -rw-r--r-- | drivers/char/sysrq.c | 4 | ||||
| -rw-r--r-- | drivers/macintosh/via-pmu.c | 6 | ||||
| -rw-r--r-- | drivers/macintosh/via-pmu68k.c | 2 | ||||
| -rw-r--r-- | drivers/md/lvm.c | 2 | ||||
| -rw-r--r-- | drivers/md/md.c | 7 | ||||
| -rw-r--r-- | drivers/message/i2o/i2o_block.c | 3 | ||||
| -rw-r--r-- | drivers/mtd/mtdblock.c | 2 | ||||
| -rw-r--r-- | drivers/mtd/mtdblock_ro.c | 2 | ||||
| -rw-r--r-- | drivers/mtd/nftlcore.c | 2 | ||||
| -rw-r--r-- | drivers/s390/block/xpram.c | 7 | ||||
| -rw-r--r-- | fs/buffer.c | 47 | ||||
| -rw-r--r-- | include/linux/fs.h | 2 | ||||
| -rw-r--r-- | kernel/ksyms.c | 2 |
14 files changed, 43 insertions, 47 deletions
diff --git a/drivers/block/amiflop.c b/drivers/block/amiflop.c index c2e353b88d9e..125bd19d0d45 100644 --- a/drivers/block/amiflop.c +++ b/drivers/block/amiflop.c @@ -1514,7 +1514,7 @@ static int fd_ioctl(struct inode *inode, struct file *filp, rel_fdc(); return -EBUSY; } - fsync_dev(inode->i_rdev); + fsync_bdev(inode->i_bdev); if (fd_motor_on(drive) == 0) { rel_fdc(); return -ENODEV; diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c index 9c28836d874b..e76db4ed8ea4 100644 --- a/drivers/char/sysrq.c +++ b/drivers/char/sysrq.c @@ -161,7 +161,7 @@ static void go_sync(struct super_block *sb, int remount_flag) } file_list_unlock(); DQUOT_OFF(sb); - fsync_dev(sb->s_dev); + fsync_bdev(sb->s_bdev); flags = MS_RDONLY; if (sb->s_op && sb->s_op->remount_fs) { ret = sb->s_op->remount_fs(sb, &flags, NULL); @@ -174,7 +174,7 @@ static void go_sync(struct super_block *sb, int remount_flag) } else printk("nothing to do\n"); } else { /* Sync only */ - fsync_dev(sb->s_dev); + fsync_bdev(sb->s_bdev); printk("OK\n"); } console_loglevel = orig_loglevel; diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c index ae2644f6adfd..3118256c45f0 100644 --- a/drivers/macintosh/via-pmu.c +++ b/drivers/macintosh/via-pmu.c @@ -1434,7 +1434,7 @@ int __openfirmware powerbook_sleep_G3(void) * BenH: Moved to _after_ sleep request and changed video * drivers to vmalloc() during sleep request. This way, all * vmalloc's are done before actual sleep of block drivers */ - fsync_dev(0); + sys_sync(); /* Sleep can fail now. May not be very robust but useful for debugging */ ret = broadcast_sleep(PBOOK_SLEEP_NOW, PBOOK_WAKE); @@ -1589,7 +1589,7 @@ int __openfirmware powerbook_sleep_Core99(void) * BenH: Moved to _after_ sleep request and changed video * drivers to vmalloc() during sleep request. This way, all * vmalloc's are done before actual sleep of block drivers */ - fsync_dev(0); + sys_sync(); /* Sleep can fail now. May not be very robust but useful for debugging */ ret = broadcast_sleep(PBOOK_SLEEP_NOW, PBOOK_WAKE); @@ -1764,7 +1764,7 @@ int __openfirmware powerbook_sleep_3400(void) * BenH: Moved to _after_ sleep request and changed video * drivers to vmalloc() during sleep request. This way, all * vmalloc's are done before actual sleep of block drivers */ - fsync_dev(0); + sys_sync(); /* Sleep can fail now. May not be very robust but useful for debugging */ ret = broadcast_sleep(PBOOK_SLEEP_NOW, PBOOK_WAKE); diff --git a/drivers/macintosh/via-pmu68k.c b/drivers/macintosh/via-pmu68k.c index 5ac40964db11..75ce19134f38 100644 --- a/drivers/macintosh/via-pmu68k.c +++ b/drivers/macintosh/via-pmu68k.c @@ -916,7 +916,7 @@ int __openfirmware powerbook_sleep(void) /* Sync the disks. */ /* XXX It would be nice to have some way to ensure that * nobody is dirtying any new buffers while we wait. */ - fsync_dev(0); + sys_sync(); /* Turn off the display backlight */ save_backlight = backlight_enabled; diff --git a/drivers/md/lvm.c b/drivers/md/lvm.c index d5ceb3f570d7..0d6c2447f677 100644 --- a/drivers/md/lvm.c +++ b/drivers/md/lvm.c @@ -878,7 +878,7 @@ static int lvm_blk_ioctl(struct inode *inode, struct file *file, P_IOCTL("BLKFLSBUF\n"); - fsync_dev(inode->i_rdev); + fsync_bdev(inode->i_bdev); invalidate_buffers(inode->i_rdev); break; diff --git a/drivers/md/md.c b/drivers/md/md.c index 0dee93d325f0..3bbbc201f4ee 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -890,7 +890,8 @@ static mdk_rdev_t * find_rdev_all(kdev_t dev) static int write_disk_sb(mdk_rdev_t * rdev) { - struct address_space *mapping = rdev->bdev->bd_inode->i_mapping; + struct block_device *bdev = rdev->bdev; + struct address_space *mapping = bdev->bd_inode->i_mapping; struct page *page; unsigned offs; int error; @@ -929,7 +930,7 @@ static int write_disk_sb(mdk_rdev_t * rdev) } printk(KERN_INFO "(write) %s's sb offset: %ld\n", partition_name(dev), sb_offset); - fsync_dev(dev); + fsync_bdev(bdev); page = grab_cache_page(mapping, sb_offset/(PAGE_CACHE_SIZE/BLOCK_SIZE)); offs = sb_offset % (PAGE_CACHE_SIZE/BLOCK_SIZE); if (!page) @@ -946,7 +947,7 @@ static int write_disk_sb(mdk_rdev_t * rdev) UnlockPage(page); wait_on_page(page); page_cache_release(page); - fsync_dev(dev); + fsync_bdev(bdev); skip: return 0; unlock: diff --git a/drivers/message/i2o/i2o_block.c b/drivers/message/i2o/i2o_block.c index 538cbfccf121..243b962d66ab 100644 --- a/drivers/message/i2o/i2o_block.c +++ b/drivers/message/i2o/i2o_block.c @@ -1137,9 +1137,6 @@ static int i2ob_release(struct inode *inode, struct file *file) if(!dev->i2odev) return 0; - /* Sync the device so we don't get errors */ - fsync_dev(inode->i_rdev); - if (dev->refcnt <= 0) printk(KERN_ALERT "i2ob_release: refcount(%d) <= 0\n", dev->refcnt); dev->refcnt--; diff --git a/drivers/mtd/mtdblock.c b/drivers/mtd/mtdblock.c index a45dfabe9494..8dfec3a98ea9 100644 --- a/drivers/mtd/mtdblock.c +++ b/drivers/mtd/mtdblock.c @@ -540,7 +540,7 @@ static int mtdblock_ioctl(struct inode * inode, struct file * file, if(!capable(CAP_SYS_ADMIN)) return -EACCES; #endif - fsync_dev(inode->i_rdev); + fsync_bdev(inode->i_bdev); invalidate_buffers(inode->i_rdev); down(&mtdblk->cache_sem); write_cached_data(mtdblk); diff --git a/drivers/mtd/mtdblock_ro.c b/drivers/mtd/mtdblock_ro.c index d12c8832e0e7..79f4a0132a2a 100644 --- a/drivers/mtd/mtdblock_ro.c +++ b/drivers/mtd/mtdblock_ro.c @@ -221,7 +221,7 @@ static int mtdblock_ioctl(struct inode * inode, struct file * file, #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) if(!capable(CAP_SYS_ADMIN)) return -EACCES; #endif - fsync_dev(inode->i_rdev); + fsync_bdev(inode->i_bdev); invalidate_buffers(inode->i_rdev); if (mtd->sync) mtd->sync(mtd); diff --git a/drivers/mtd/nftlcore.c b/drivers/mtd/nftlcore.c index aa149911b4e5..7b41b62ad37c 100644 --- a/drivers/mtd/nftlcore.c +++ b/drivers/mtd/nftlcore.c @@ -795,7 +795,7 @@ static int nftl_ioctl(struct inode * inode, struct file * file, unsigned int cmd } case BLKFLSBUF: if (!capable(CAP_SYS_ADMIN)) return -EACCES; - fsync_dev(inode->i_rdev); + fsync_bdev(inode->i_bdev); invalidate_buffers(inode->i_rdev); if (nftl->mtd->sync) nftl->mtd->sync(nftl->mtd); diff --git a/drivers/s390/block/xpram.c b/drivers/s390/block/xpram.c index 63116ecc76fd..7e91ea6b2035 100644 --- a/drivers/s390/block/xpram.c +++ b/drivers/s390/block/xpram.c @@ -654,7 +654,7 @@ int xpram_ioctl (struct inode *inode, struct file *filp, (u64 *) arg); case BLKFLSBUF: /* flush, 0x1261 */ - fsync_dev(inode->i_rdev); + fsync_bdev(inode->i_bdev); if ( capable(CAP_SYS_ADMIN) )invalidate_buffers(inode->i_rdev); return 0; @@ -1191,10 +1191,7 @@ void cleanup_module(void) { int i; - /* first of all, flush it all and reset all the data structures */ - - for (i=0; i<xpram_devs; i++) - fsync_dev(MKDEV(xpram_major, i)); /* flush the devices */ + /* first of all, reset all the data structures */ #if (XPRAM_VERSION == 22) blk_dev[major].request_fn = NULL; diff --git a/fs/buffer.c b/fs/buffer.c index 3077d85c2e4a..e330e7ed6213 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -343,36 +343,37 @@ int fsync_no_super(struct block_device *bdev) int fsync_dev(kdev_t dev) { - sync_buffers(dev, 0); - - lock_kernel(); - sync_inodes(dev); - if (!kdev_none(dev)) { - struct super_block *sb = get_super(dev); - if (sb) { - DQUOT_SYNC(sb); - drop_super(sb); - } - } else - DQUOT_SYNC(NULL); - sync_supers(dev); - unlock_kernel(); - - return sync_buffers(dev, 1); + struct block_device *bdev = bdget(kdev_t_to_nr(dev)); + if (bdev) { + int res = fsync_bdev(bdev); + bdput(bdev); + return res; + } + return 0; } -/* - * There's no real reason to pretend we should - * ever do anything differently - */ -void sync_dev(kdev_t dev) +int fsync_bdev(struct block_device *bdev) { - fsync_dev(dev); + struct super_block *sb = get_super(to_kdev_t(bdev->bd_dev)); + if (sb) { + int res = fsync_super(sb); + drop_super(sb); + return res; + } + return fsync_no_super(bdev); } asmlinkage long sys_sync(void) { - fsync_dev(NODEV); + sync_buffers(NODEV, 0); + + lock_kernel(); + sync_inodes(NODEV); + DQUOT_SYNC(NULL); + sync_supers(NODEV); + unlock_kernel(); + + sync_buffers(NODEV, 1); return 0; } diff --git a/include/linux/fs.h b/include/linux/fs.h index 89208aabe5b8..f9399b56d73d 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1216,8 +1216,8 @@ extern void sync_inodes(kdev_t); extern void sync_unlocked_inodes(void); extern void write_inode_now(struct inode *, int); extern int sync_buffers(kdev_t, int); -extern void sync_dev(kdev_t); extern int fsync_dev(kdev_t); +extern int fsync_bdev(struct block_device *); extern int fsync_super(struct super_block *); extern int fsync_no_super(struct block_device *); extern void sync_inodes_sb(struct super_block *); diff --git a/kernel/ksyms.c b/kernel/ksyms.c index 30bb84d5c19d..2225f68de55e 100644 --- a/kernel/ksyms.c +++ b/kernel/ksyms.c @@ -181,6 +181,7 @@ EXPORT_SYMBOL(invalidate_device); EXPORT_SYMBOL(invalidate_inode_pages); EXPORT_SYMBOL(truncate_inode_pages); EXPORT_SYMBOL(fsync_dev); +EXPORT_SYMBOL(fsync_bdev); EXPORT_SYMBOL(fsync_no_super); EXPORT_SYMBOL(permission); EXPORT_SYMBOL(vfs_permission); @@ -311,7 +312,6 @@ EXPORT_SYMBOL(blk_dev); EXPORT_SYMBOL(is_read_only); EXPORT_SYMBOL(set_device_ro); EXPORT_SYMBOL(bmap); -EXPORT_SYMBOL(sync_dev); EXPORT_SYMBOL(devfs_register_partitions); EXPORT_SYMBOL(blkdev_open); EXPORT_SYMBOL(blkdev_get); |
