linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andrew Patterson <andrew.patterson@hp.com>
To: linux-scsi@vger.kernel.org
Cc: andrew.patterson@hp.com, James.Bottomley@HansenPartnership.com,
	linux-kernel@vger.kernel.org, viro@zeniv.linux.org.uk,
	axboe@kernel.dk, andmike@linux.vnet.ibm.com, mike.miller@hp.com,
	genanr@emsphone.com, jmoyer@redhat.com
Subject: [PATCH 0/6] detect online disk resize
Date: Fri, 29 Aug 2008 17:12:54 -0600	[thread overview]
Message-ID: <20080829231254.25065.66052.stgit@bluto.andrew> (raw)

This is version 2 of a patch series I submitted back in May 2008. This
version now checks for device size changes in the rescan_partitions()
routine.  Which in turn is called when a device is opened and in the
BLKRRPART ioctl.

I am resubmitting this patch series as I got little response the
previous time.  Al Viro has told me offline that he would look at it this
time.

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.

Jeff Moyer and Andy Ryan have done some light testing on the previous
version of this series.

This patch set has been tested with scsi-misc-2.6. It also applies to
linux-next with some minor, obvious changes.


Diff stats:

 drivers/scsi/sd.c     |    4 +-
 fs/block_dev.c        |   92 ++++++++++++++++++++++++++++++++++++++++++++++---
 fs/partitions/check.c |    3 +-
 include/linux/fs.h    |    3 ++
 4 files changed, 94 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.

-- 
Andrew Patterson


             reply	other threads:[~2008-08-29 23:13 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-29 23:12 Andrew Patterson [this message]
2008-08-29 23:13 ` [PATCH 1/6] Wrapper for lower-level revalidate_disk routines Andrew Patterson
2008-09-03 18:16   ` Jeff Moyer
2008-08-29 23:13 ` [PATCH 2/6] Adjust block device size after an online resize of a disk Andrew Patterson
2008-09-03 18:17   ` Jeff Moyer
2008-08-29 23:13 ` [PATCH 3/6] Check for device resize when rescanning partitions Andrew Patterson
2008-09-03 18:17   ` Jeff Moyer
2008-08-29 23:13 ` [PATCH 4/6] SCSI sd driver calls revalidate_disk wrapper Andrew Patterson
2008-09-03 18:17   ` Jeff Moyer
2008-08-29 23:13 ` [PATCH 5/6] Added flush_disk to factor out common buffer cache flushing code Andrew Patterson
2008-09-03 18:19   ` Jeff Moyer
2008-09-04  4:16     ` Andrew Patterson
2008-09-04 13:13       ` Jeff Moyer
2008-08-29 23:13 ` [PATCH 6/6] Call flush_disk() after detecting an online resize Andrew Patterson
2008-09-03 18:20   ` Jeff Moyer
2008-09-04  7:26 ` [PATCH 0/6] detect online disk resize Jens Axboe
2008-09-04 14:25   ` Andrew Patterson
2008-09-08 18:01 ` Jeff Moyer
2008-09-09  7:41   ` Pasi Kärkkäinen
2008-09-24 15:23 ` Vladislav Bolkhovitin
2008-09-04 20:27 Andrew Patterson
2008-09-05  7:02 ` Jens Axboe
2008-09-05  8:21 ` Pasi Kärkkäinen
2008-09-05 15:15   ` Andrew Patterson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080829231254.25065.66052.stgit@bluto.andrew \
    --to=andrew.patterson@hp.com \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=andmike@linux.vnet.ibm.com \
    --cc=axboe@kernel.dk \
    --cc=genanr@emsphone.com \
    --cc=jmoyer@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=mike.miller@hp.com \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).