]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blob - src/patches/suse-2.6.27.25/patches.drivers/bdev-resize-added-flush_disk
Updated xen patches taken from suse.
[people/teissler/ipfire-2.x.git] / src / patches / suse-2.6.27.25 / patches.drivers / bdev-resize-added-flush_disk
1 Subject: Added flush_disk to factor out common buffer cache flushing code.
2 From: Andrew Patterson <andrew.patterson@hp.com>
3 Date: Thu Oct 9 08:56:13 2008 +0200:
4 Git: 56ade44b46780fa291fa68b824f1dafdcb11b0ca
5 References: FATE#302348,FATE#303786
6
7 We need to be able to flush the buffer cache for for more than
8 just when a disk is changed, so we factor out common cache flush code
9 in check_disk_change() to an internal flush_disk() routine. This
10 routine will then be used for both disk changes and disk resizes (in a
11 later patch).
12
13 Include the disk name in the text indicating that there are busy
14 inodes on the device and increase the KERN severity of the message.
15
16 Adapted for SLES11, based on the original commit.
17
18 Signed-off-by: Andrew Patterson <andrew.patterson@hp.com>
19 Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
20 Signed-off-by: Hannes Reinecke <hare@suse.de>
21 ---
22 fs/block_dev.c | 32 +++++++++++++++++++++++++++-----
23 1 files changed, 27 insertions(+), 5 deletions(-)
24
25 diff --git a/fs/block_dev.c b/fs/block_dev.c
26 index 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 --
78 1.5.2.4
79