diff -urpN --exclude-from=/home/davej/.exclude bk-linus/fs/block_dev.c linux-2.5/fs/block_dev.c
--- bk-linus/fs/block_dev.c	2002-11-21 02:19:41.000000000 +0000
+++ linux-2.5/fs/block_dev.c	2002-11-21 18:01:54.000000000 +0000
@@ -703,14 +703,15 @@ int blkdev_put(struct block_device *bdev
 
 	down(&bdev->bd_sem);
 	lock_kernel();
-	switch (kind) {
-	case BDEV_FILE:
-	case BDEV_FS:
-		sync_blockdev(bd_inode->i_bdev);
-		break;
-	}
-	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);
