]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/suse-2.6.27.39/patches.drivers/bdev-resize-added-flush_disk
Imported linux-2.6.27.39 suse/xen patches.
[ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.drivers / bdev-resize-added-flush_disk
CommitLineData
2cb7cef9
BS
1Subject: Added flush_disk to factor out common buffer cache flushing code.
2From: Andrew Patterson <andrew.patterson@hp.com>
3Date: Thu Oct 9 08:56:13 2008 +0200:
4Git: 56ade44b46780fa291fa68b824f1dafdcb11b0ca
5References: FATE#302348,FATE#303786
6
7We need to be able to flush the buffer cache for for more than
8just when a disk is changed, so we factor out common cache flush code
9in check_disk_change() to an internal flush_disk() routine. This
10routine will then be used for both disk changes and disk resizes (in a
11later patch).
12
13Include the disk name in the text indicating that there are busy
14inodes on the device and increase the KERN severity of the message.
15
16Adapted for SLES11, based on the original commit.
17
18Signed-off-by: Andrew Patterson <andrew.patterson@hp.com>
19Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
20Signed-off-by: Hannes Reinecke <hare@suse.de>
21---
22 fs/block_dev.c | 32 +++++++++++++++++++++++++++-----
23 1 files changed, 27 insertions(+), 5 deletions(-)
24
25diff --git a/fs/block_dev.c b/fs/block_dev.c
26index f8df73a..eb029ac 100644
27--- a/fs/block_dev.c
28+++ b/fs/block_dev.c
29@@ -869,6 +869,32 @@ struct block_device *open_by_devnum(dev_t dev, unsigned mode)
30 EXPORT_SYMBOL(open_by_devnum);
31
32 /**
33+ * flush_disk - invalidates all buffer-cache entries on a disk
34+ *
35+ * @bdev: struct block device to be flushed
36+ *
37+ * Invalidates all buffer-cache entries on a disk. It should be called
38+ * when a disk has been changed -- either by a media change or online
39+ * resize.
40+ */
41+static void flush_disk(struct block_device *bdev)
42+{
43+ if (__invalidate_device(bdev)) {
44+ char name[BDEVNAME_SIZE] = "";
45+
46+ if (bdev->bd_disk)
47+ disk_name(bdev->bd_disk, 0, name);
48+ printk(KERN_WARNING "VFS: busy inodes on changed media or "
49+ "resized disk %s\n", name);
50+ }
51+
52+ if (!bdev->bd_disk)
53+ return;
54+ if (bdev->bd_disk->minors > 1)
55+ bdev->bd_invalidated = 1;
56+}
57+
58+/**
59 * check_disk_size_change - checks for disk size change and adjusts
60 * bdev size.
61 *
62@@ -945,13 +971,9 @@ int check_disk_change(struct block_device *bdev)
63 if (!bdops->media_changed(bdev->bd_disk))
64 return 0;
65
66- if (__invalidate_device(bdev))
67- printk("VFS: busy inodes on changed media.\n");
68-
69+ flush_disk(bdev);
70 if (bdops->revalidate_disk)
71 bdops->revalidate_disk(bdev->bd_disk);
72- if (bdev->bd_disk->minors > 1)
73- bdev->bd_invalidated = 1;
74 return 1;
75 }
76
77--
781.5.2.4
79