Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 110522
b: refs/heads/master
c: 56ade44
h: refs/heads/master
v: v3
  • Loading branch information
Andrew Patterson authored and Jens Axboe committed Oct 9, 2008
1 parent 3520577 commit 7438252
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f98a8cae12f2b2a8f9bfd7a53c990a1a405e880e
refs/heads/master: 56ade44b46780fa291fa68b824f1dafdcb11b0ca
32 changes: 27 additions & 5 deletions trunk/fs/block_dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -852,6 +852,32 @@ struct block_device *open_by_devnum(dev_t dev, unsigned mode)

EXPORT_SYMBOL(open_by_devnum);

/**
* flush_disk - invalidates all buffer-cache entries on a disk
*
* @bdev: struct block device to be flushed
*
* Invalidates all buffer-cache entries on a disk. It should be called
* when a disk has been changed -- either by a media change or online
* resize.
*/
static void flush_disk(struct block_device *bdev)
{
if (__invalidate_device(bdev)) {
char name[BDEVNAME_SIZE] = "";

if (bdev->bd_disk)
disk_name(bdev->bd_disk, 0, name);
printk(KERN_WARNING "VFS: busy inodes on changed media or "
"resized disk %s\n", name);
}

if (!bdev->bd_disk)
return;
if (disk_partitionable(bdev->bd_disk))
bdev->bd_invalidated = 1;
}

/**
* check_disk_size_change - checks for disk size change and adjusts
* bdev size.
Expand Down Expand Up @@ -929,13 +955,9 @@ int check_disk_change(struct block_device *bdev)
if (!bdops->media_changed(bdev->bd_disk))
return 0;

if (__invalidate_device(bdev))
printk("VFS: busy inodes on changed media.\n");

flush_disk(bdev);
if (bdops->revalidate_disk)
bdops->revalidate_disk(bdev->bd_disk);
if (disk_partitionable(bdev->bd_disk))
bdev->bd_invalidated = 1;
return 1;
}

Expand Down

0 comments on commit 7438252

Please sign in to comment.