RE: [PATCH] Fix over-zealous flush_disk when changing device size.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: linux-raid-owner@xxxxxxxxxxxxxxx [mailto:linux-raid-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Jeff Moyer
> Sent: Thursday, February 17, 2011 6:04 PM
> To: NeilBrown
> Cc: Andrew Patterson; Jens Axboe; linux-raid@xxxxxxxxxxxxxxx; dm-
> devel@xxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
> Subject: Re: [PATCH] Fix over-zealous flush_disk when changing device
> size.
> 
> NeilBrown <neilb@xxxxxxx> writes:
> 
> > Hi Andrew (and others)
> >  I wonder if you would review the following for me and comment.
> >
> > Thanks,
> > NeilBrown
> >
> >
> >
> > From e7f75c2a757108cdd83ce8c808a16bf27686c95f Mon Sep 17 00:00:00 2001
> > From: NeilBrown <neilb@xxxxxxx>
> > Date: Thu, 17 Feb 2011 16:37:30 +1100
> > Subject: [PATCH] Fix over-zealous flush_disk when changing device
> size.
> >
> > There are two cases when we call flush_disk.
> > In one, the device has disappeared (check_disk_change) so any
> > data will hold becomes irrelevant.
> > In the oter, the device has changed size (check_disk_size_change)
> > so data we hold may be irrelevant.
> >
> > In both cases it makes sense to discard any 'clean' buffers,
> > so they will be read back from the device if needed.
> >
> > In the former case it makes sense to discard 'dirty' buffers
> > as there will never be anywhere safe to write the data.  In the
> > second case it *does*not* make sense to discard dirty buffers
> > as that will lead to file system corruption when you simply enlarge
> > the containing devices.
> >
> > flush_disk calls __invalidate_devices.
> > __invalidate_device calls both invalidate_inodes and invalidate_bdev.
> >
> > invalidate_inodes *does* discard I_DIRTY inodes and this does lead
> > to fs corruption.
> >
> > invalidate_bev *does*not* discard dirty pages, but I don't really care
> > about that at present.
> >
> > So this patch adds a flag to __invalidate_device (calling it
> > __invalidate_device2) to indicate whether dirty buffers should be
> > killed, and this is passed to invalidate_inodes which can choose to
> > skip dirty inodes.
> >
> > flusk_disk then passes true from check_disk_change and false from
> > check_disk_size_change.
> >
> > dm avoids tripping over this problem by calling i_size_write directly
> > rathher than using check_disk_size_change.
> >
> > md does use check_disk_size_change and so is affected.
> >
> > This regression was introduced by commit 608aeef17a
> > which causes check_disk_size_change to call
> > flush_disk.
> 
> This makes sense to me.  Nice write-up, Neil.
> 
> Acked-by: Jeff Moyer <jmoyer@xxxxxxxxxx>


Neil, Is this fix is ready? If yes, where can I find it?

BR
Adam

> --
> To unsubscribe from this list: send the line "unsubscribe linux-raid" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux