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 6/6] Call flush_disk() after detecting an online resize.
Date: Fri, 29 Aug 2008 17:13:26 -0600	[thread overview]
Message-ID: <20080829231325.25065.48172.stgit@bluto.andrew> (raw)
In-Reply-To: <20080829231254.25065.66052.stgit@bluto.andrew>

Call flush_disk() after detecting an online resize.

We call flush_disk() to make sure the buffer cache for the disk is
flushed after a disk resize. There are two resize cases, growing and
shrinking. Given that users can shrink/then grow a disk before
revalidate_disk() is called, we treat the grow case identically to
shrinking. We need to flush the buffer cache after an online shrink
because, as James Bottomley puts it,

     The two use cases for shrinking I can see are

     1. planned: the fs is already shrunk to within the new boundaries
        and all data is relocated, so invalidate is fine (any dirty
        buffers that might exist in the shrunk region are there only
        because they were relocated but not yet written to their
        original location).
     2. unplanned:  In this case, the fs is probably toast, so whether
        we invalidate or not isn't going to make a whole lot of
        difference; it's still going to try to read or write from
        sectors beyond the new size and get I/O errors.

Immediately invalidating shrunk disks will cause errors for outstanding
I/Os for reads/write beyond the new end of the disk to be generated
earlier then if we waited for the normal buffer cache operation. It also
removes a potential security hole where we might keep old data around
from beyond the end of the shrunk disk if the disk was not invalidated.

Signed-off-by: Andrew Patterson <andrew.patterson@hp.com>
---

 fs/block_dev.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)


diff --git a/fs/block_dev.c b/fs/block_dev.c
index 5ce28b1..6cb00dd 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -885,8 +885,8 @@ static void flush_disk(struct block_device *bdev)
 
 		if (bdev->bd_disk)
 			disk_name(bdev->bd_disk, 0, name);
-		printk(KERN_WARNING "VFS: busy inodes on changed media %s\n",
-		       name);
+		printk(KERN_WARNING "VFS: busy inodes on changed media or "
+		       "resized disk %s\n", name);
 	}
 
 	if (!bdev->bd_disk)
@@ -919,6 +919,7 @@ void check_disk_size_change(struct gendisk *disk, struct block_device *bdev)
 		       "%s: detected capacity change from %lld to %lld\n",
 		       name, bdev_size, disk_size);
 		i_size_write(bdev->bd_inode, disk_size);
+		flush_disk(bdev);
 	}
 }
 EXPORT_SYMBOL(check_disk_size_change);


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

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-29 23:12 [PATCH 0/6] detect online disk resize Andrew Patterson
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 ` Andrew Patterson [this message]
2008-09-03 18:20   ` [PATCH 6/6] Call flush_disk() after detecting an online resize 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-04 20:27 ` [PATCH 6/6] Call flush_disk() after detecting an online resize 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=20080829231325.25065.48172.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).