Re: [PATCH 0/6] detect online disk resize



On Thu, Sep 04 2008, Andrew Patterson wrote:
Resubmitting this patch against Jens's linux-2.6-block:for-2.6.28 repo.

This patch series handles online disk resizes that are currently not
completely recognized by the kernel using the existing revalidate_disk
routines. An online resize can occur when growing or shrinking a
Fibre Channel LUN or perhaps by adding a disk to an existing RAID
volume.

The kernel currently recognizes a device size change when the
lower-level revalidate_disk routines are called; however, the block
layer does not use the new size while it has any current openers on
the device. So, for example, if LVM has an volume open on the device,
you will generally not see the size change until after a reboot. We
fix this problem by creating a wrapper to be used with lower-level
revalidate_disk routines. This wrapper first calls the lower-level
driver's revalidate_disk routine. It then compares the gendisk
capacity to the block devices inode size. If there is a difference, we
adjust the block device's size. If the size has changed, we then flush
the disk for safety. The size is also checked in rescan_partitions
which is called when the device is opened or when the BLKRRPART ioctl
is called.

There are several ways to "kick off" a device size change:

1. For SCSI devices do:

# echo 1 > /sys/class/scsi_device/<device>/device/rescan

or

# blockdev --rereadpt <device file>

2. Other devices (not device mapper)

# blockdev --rereadpt <device file>

I have tested this patch on SCSI and SmartArray (cciss)
devices. Device mapper still does not recognize device size changes
until the device is restarted.


Diff stats:

drivers/scsi/sd.c | 4 +-
fs/block_dev.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++---
fs/partitions/check.c | 3 +-
include/linux/fs.h | 3 ++
4 files changed, 93 insertions(+), 8 deletions(-)

Commits:

- Wrapper for lower-level revalidate_disk routines.
- Adjust block device size after an online resize of a disk.
- Check for device resize in rescan_partitions.
- SCSI sd driver calls revalidate_disk wrapper.
- Added flush_disk to factor out common buffer cache flushing code.
- Call flush_disk() after detecting an online resize.

Thanks Andrew, applied.

--
Jens Axboe

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



Relevant Pages

  • Re: bdev size not updated correctly after underlying device is resized
    ... A block device may be resized while online. ... just trying to extend an LVM logical volume after a resize but cannot ... Well, to be pendantic, the disk could have been shrunk, then expanded, ...
    (Linux-Kernel)
  • Re: Making space for another OS.
    ... Bill Rugolsky Jr. ... but ending the partition ~10Gb short of where it ends now. ... Will vgdisplay show me the new PE count after the resize? ... I have a 40Gb USB2 disk which works well on this box, ...
    (Fedora)
  • Re: Growing LVM root partition under Dapper?
    ... There is nothing else on the disk except a small 250 MB /boot partition.. ... root partition is mounted and you cannot umount it on a running system, ... you cannot resize the file system on a running system. ...
    (Ubuntu)
  • Re: Hardware Raid Expansion and LVM
    ... Problem is I don't know how to extend LVM to a larger size, ... first you need to fix up the physical disk either resize the partition ... /dev/sdb1 to use all of the disk. ... then you will be able to resize the Logical Volume ...
    (Fedora)
  • Re: page- and swap-files, autogen, modparams.dat, file-naming etc
    ... Tell AUTOGEN not to resize swap file ... out AUTOGEN's recommendations. ... case, if there is insufficient contiguous space on the disk, SYSGEN ... >> Then reboot the system. ...
    (comp.os.vms)

Loading