Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933105Ab2BAV4D (ORCPT ); Wed, 1 Feb 2012 16:56:03 -0500 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:55124 "EHLO out1-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756997Ab2BAVH6 (ORCPT ); Wed, 1 Feb 2012 16:07:58 -0500 X-Sasl-enc: qnuQ46/n8sXiv2dgPDtEvcsU+k5c/fyN6s9FRO7P3xPF 1328130477 X-Mailbox-Line: From gregkh@clark.kroah.org Wed Feb 1 12:15:31 2012 Message-Id: <20120201201531.842552350@clark.kroah.org> User-Agent: quilt/0.51-14.1 Date: Wed, 01 Feb 2012 12:14:11 -0800 From: Greg KH To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: torvalds@linux-foundation.org, akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk, Paolo Bonzini , Petr Matousek , linux-scsi@vger.kernel.org, Jens Axboe , James Bottomley , Alasdair G Kergon , dm-devel@redhat.com, Ben Hutchings Subject: [09/20] dm: do not forward ioctls from logical volumes to the underlying device In-Reply-To: <20120201210055.GA25374@kroah.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2206 Lines: 70 2.6.32-longterm review patch. If anyone has any objections, please let me know. ------------------ From: Paolo Bonzini commit ec8013beddd717d1740cfefb1a9b900deef85462 upstream. A logical volume can map to just part of underlying physical volume. In this case, it must be treated like a partition. Based on a patch from Alasdair G Kergon. Cc: Alasdair G Kergon Cc: dm-devel@redhat.com Signed-off-by: Paolo Bonzini Signed-off-by: Linus Torvalds [bwh: Backport to 2.6.32 - drop change to drivers/md/dm-flakey.c] Signed-off-by: Ben Hutchings Signed-off-by: Greg Kroah-Hartman --- drivers/md/dm-linear.c | 12 +++++++++++- drivers/md/dm-mpath.c | 6 ++++++ 2 files changed, 17 insertions(+), 1 deletion(-) --- a/drivers/md/dm-linear.c +++ b/drivers/md/dm-linear.c @@ -116,7 +116,17 @@ static int linear_ioctl(struct dm_target unsigned long arg) { struct linear_c *lc = (struct linear_c *) ti->private; - return __blkdev_driver_ioctl(lc->dev->bdev, lc->dev->mode, cmd, arg); + struct dm_dev *dev = lc->dev; + int r = 0; + + /* + * Only pass ioctls through if the device sizes match exactly. + */ + if (lc->start || + ti->len != i_size_read(dev->bdev->bd_inode) >> SECTOR_SHIFT) + r = scsi_verify_blk_ioctl(NULL, cmd); + + return r ? : __blkdev_driver_ioctl(dev->bdev, dev->mode, cmd, arg); } static int linear_merge(struct dm_target *ti, struct bvec_merge_data *bvm, --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c @@ -1464,6 +1464,12 @@ static int multipath_ioctl(struct dm_tar spin_unlock_irqrestore(&m->lock, flags); + /* + * Only pass ioctls through if the device sizes match exactly. + */ + if (!r && ti->len != i_size_read(bdev->bd_inode) >> SECTOR_SHIFT) + r = scsi_verify_blk_ioctl(NULL, cmd); + return r ? : __blkdev_driver_ioctl(bdev, mode, cmd, arg); } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/