]> git.hungrycats.org Git - linux/commitdiff
[PATCH] sync blockdevs on the final close only
authorAndrew Morton <akpm@digeo.com>
Fri, 28 Mar 2003 11:21:07 +0000 (03:21 -0800)
committerDave Jones <davej@tetrachloride.(none)>
Fri, 28 Mar 2003 11:21:07 +0000 (03:21 -0800)
From: davej@codemonkey.org.uk

We currently run sync_blockdev() on every close of a blockdev.  This patch
arranges for the sync to happen only on the final close.

fs/block_dev.c

index d46f44fb0d47b011548b9ebf83fb2f7a12b86697..948864b885b5e5c7b8ebb307932b149cde25289e 100644 (file)
@@ -653,15 +653,16 @@ int blkdev_put(struct block_device *bdev, int kind)
        struct gendisk *disk = bdev->bd_disk;
 
        down(&bdev->bd_sem);
-       switch (kind) {
-       case BDEV_FILE:
-       case BDEV_FS:
-               sync_blockdev(bd_inode->i_bdev);
-               break;
-       }
        lock_kernel();
-       if (!--bdev->bd_openers)
+       if (!--bdev->bd_openers) {
+               switch (kind) {
+               case BDEV_FILE:
+               case BDEV_FS:
+                       sync_blockdev(bd_inode->i_bdev);
+                       break;
+               }
                kill_bdev(bdev);
+       }
        if (bdev->bd_contains == bdev) {
                if (disk->fops->release)
                        ret = disk->fops->release(bd_inode, NULL);