summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Viro <viro@math.psu.edu>2002-02-27 20:23:33 -0800
committerLinus Torvalds <torvalds@penguin.transmeta.com>2002-02-27 20:23:33 -0800
commit7155112cbcab15e2e34809c97c89907b8fa8013e (patch)
treeb5d82a5e69f94544f9f7adcee522347a3fb9e977
parent8a0acc94ebedbcc6459763c1b391a3f83a5e8df0 (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.c2
-rw-r--r--drivers/char/sysrq.c4
-rw-r--r--drivers/macintosh/via-pmu.c6
-rw-r--r--drivers/macintosh/via-pmu68k.c2
-rw-r--r--drivers/md/lvm.c2
-rw-r--r--drivers/md/md.c7
-rw-r--r--drivers/message/i2o/i2o_block.c3
-rw-r--r--drivers/mtd/mtdblock.c2
-rw-r--r--drivers/mtd/mtdblock_ro.c2
-rw-r--r--drivers/mtd/nftlcore.c2
-rw-r--r--drivers/s390/block/xpram.c7
-rw-r--r--fs/buffer.c47
-rw-r--r--include/linux/fs.h2
-rw-r--r--kernel/ksyms.c2
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);