Prev: /etc/profile: line 30: /dev/null: Permission denied
Next: : mm: Make vmalloc_user() align base kernel virtual address to SHMLBA.
From: Jens Axboe on 18 Sep 2009 17:10 On Fri, Sep 18 2009, Jens Axboe wrote: > On Sat, Sep 19 2009, Jun'ichi Nomura wrote: > > This patch is a preparation for the last patch in this patchset > > which changes blk_set_default_limits() to set 0 to max_sectors. > > > > dm uses blk_stack_limits() to merge limits of underlying devices > > and copy the end result to the queue. > > But if there's no underlying device (like 'zero' target), > > max_sectors/max_hw_sectors are left unchanged from the default 0 > > and just copying it to the queue causes problems. > > > > Provide blk_queue_copy_limits() to get a safe copy with > > invalid values fixed-up. > > Added for 2.6.32. And removed, it's white space damaged and doesn't apply to the current tree. -- Jens Axboe -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Mike Snitzer on 18 Sep 2009 17:10 On Fri, Sep 18 2009 at 12:24pm -0400, Jun'ichi Nomura <j-nomura(a)ce.jp.nec.com> wrote: > This patch is a preparation for the last patch in this patchset > which changes blk_set_default_limits() to set 0 to max_sectors. should read: changes blk_set_default_limits() to set max_sectors to 0. > dm uses blk_stack_limits() to merge limits of underlying devices > and copy the end result to the queue. > But if there's no underlying device (like 'zero' target), > max_sectors/max_hw_sectors are left unchanged from the default 0 > and just copying it to the queue causes problems. > > Provide blk_queue_copy_limits() to get a safe copy with > invalid values fixed-up. > > Signed-off-by: Kiyoshi Ueda <k-ueda(a)ct.jp.nec.com> > Signed-off-by: Jun'ichi Nomura <j-nomura(a)ce.jp.nec.com> > Cc: David Strand <dpstrand(a)gmail.com> > Cc: Mike Snitzer <snitzer(a)redhat.com> > Cc: Alasdair G Kergon <agk(a)redhat.com> > Cc: Martin K. Petersen <martin.petersen(a)oracle.com> > Cc: Jens Axboe <jens.axboe(a)oracle.com> > --- > block/blk-settings.c | 28 ++++++++++++++++++++++++++++ > include/linux/blkdev.h | 1 + > 2 files changed, 29 insertions(+) > > Index: linux-2.6.31.work/block/blk-settings.c > =================================================================== > --- linux-2.6.31.work.orig/block/blk-settings.c > +++ linux-2.6.31.work/block/blk-settings.c > @@ -122,6 +122,34 @@ void blk_set_default_limits(struct queue > EXPORT_SYMBOL(blk_set_default_limits); > > /** > + * blk_queue_copy_limits - copy limits to queue > + * @q: the request queue whose limits as a copy destination > + * @lim: the queue_limits structure as a copy source > + * > + * Description: > + * Copies a queue_limit struct contents to @q with fix-ups to > + * invalid values. > + */ > +void blk_queue_copy_limits(struct request_queue *q, struct queue_limits > *lim) > +{ > + q->limits = *lim; > + > + /* > + * blk_set_default_limits() sets 0 to max_sectors/max_hw_sectors > + * so that blk_stack_limits() appropriately propagate the values > + * of lower-stack by min_not_zero(). > + * However, if the default value 0 is unchanged (e.g. the stacking > + * device is virtual and has no underlying device), it results > + * in unusable device. Likewise: blk_set_default_limits() sets max_sectors/max_hw_sectors to 0? > + * Check if max_sectors/max_hw_sectors have non-zero values, > + * and set SAFE_MAX_SECTORS if they do. > + */ > + if (q->limits.max_sectors == 0 || q->limits.max_hw_sectors == 0) > + blk_queue_max_sectors(q, SAFE_MAX_SECTORS); Shouldn't this check (and the entire comment above it) get added in the 3rd patch once max_sectors/max_hw_sectors sre actually set to 0? I'm being really pedantic here but... -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Jens Axboe on 18 Sep 2009 17:11 On Sat, Sep 19 2009, Jun'ichi Nomura wrote: > This patch is a preparation for the last patch in this patchset > which changes blk_set_default_limits() to set 0 to max_sectors. > > dm uses blk_stack_limits() to merge limits of underlying devices > and copy the end result to the queue. > But if there's no underlying device (like 'zero' target), > max_sectors/max_hw_sectors are left unchanged from the default 0 > and just copying it to the queue causes problems. > > Provide blk_queue_copy_limits() to get a safe copy with > invalid values fixed-up. Added for 2.6.32. -- Jens Axboe -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Mike Snitzer on 18 Sep 2009 17:11 On Fri, Sep 18 2009 at 3:28pm -0400, Martin K. Petersen <martin.petersen(a)oracle.com> wrote: > >>>>> "Jun'ichi" == Jun'ichi Nomura <j-nomura(a)ce.jp.nec.com> writes: > > + if (q->limits.max_sectors == 0 || q->limits.max_hw_sectors == 0) > + blk_queue_max_sectors(q, SAFE_MAX_SECTORS); > > I'm really not keen on perpetuating SAFE_MAX_SECTORS for something that > was written in this millennium. > > I'd much rather we just do this, then: > > block: Set max_sectors correctly for stacking devices > > The topology changes unintentionally caused SAFE_MAX_SECTORS to be set > for stacking devices. Set the default limit to BLK_DEF_MAX_SECTORS and > provide SAFE_MAX_SECTORS in blk_queue_make_request() for legacy hw > drivers that depend on the old behavior. > > Signed-off-by: Martin K. Petersen <martin.petersen(a)oracle.com> Nice. Avoids the need for a safe queue_limits copy and associated naunce. Acked-by: Mike Snitzer <snitzer(a)redhat.com> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Jun'ichi Nomura on 19 Sep 2009 11:50
Jens Axboe wrote: > On Fri, Sep 18 2009, Jens Axboe wrote: >> On Sat, Sep 19 2009, Jun'ichi Nomura wrote: >>> This patch is a preparation for the last patch in this patchset >>> which changes blk_set_default_limits() to set 0 to max_sectors. >>> >>> dm uses blk_stack_limits() to merge limits of underlying devices >>> and copy the end result to the queue. >>> But if there's no underlying device (like 'zero' target), >>> max_sectors/max_hw_sectors are left unchanged from the default 0 >>> and just copying it to the queue causes problems. >>> >>> Provide blk_queue_copy_limits() to get a safe copy with >>> invalid values fixed-up. >> Added for 2.6.32. > > And removed, it's white space damaged and doesn't apply to the current > tree. Sorry... I forgot to disable line-wrapping and broke the patch. Re-sending with Mike's correction to English applied. This patch is a preparation for the last patch in this patchset which changes blk_set_default_limits() to set max_sectors to 0. dm uses blk_stack_limits() to merge limits of underlying devices and copy the end result to the queue. But if there's no underlying device (like 'zero' target), max_sectors/max_hw_sectors are left unchanged from the default 0 and just copying it to the queue causes problems. Provide blk_queue_copy_limits() to get a safe copy with invalid values fixed-up. Signed-off-by: Kiyoshi Ueda <k-ueda(a)ct.jp.nec.com> Signed-off-by: Jun'ichi Nomura <j-nomura(a)ce.jp.nec.com> Cc: David Strand <dpstrand(a)gmail.com> Cc: Mike Snitzer <snitzer(a)redhat.com> Cc: Alasdair G Kergon <agk(a)redhat.com> Cc: Martin K. Petersen <martin.petersen(a)oracle.com> Cc: Jens Axboe <jens.axboe(a)oracle.com> --- block/blk-settings.c | 28 ++++++++++++++++++++++++++++ include/linux/blkdev.h | 1 + 2 files changed, 29 insertions(+) Index: linux-2.6.31.work/block/blk-settings.c =================================================================== --- linux-2.6.31.work.orig/block/blk-settings.c +++ linux-2.6.31.work/block/blk-settings.c @@ -122,6 +122,34 @@ void blk_set_default_limits(struct queue EXPORT_SYMBOL(blk_set_default_limits); /** + * blk_queue_copy_limits - copy limits to queue + * @q: the request queue whose limits as a copy destination + * @lim: the queue_limits structure as a copy source + * + * Description: + * Copies a queue_limit struct contents to @q with fix-ups to + * invalid values. + */ +void blk_queue_copy_limits(struct request_queue *q, struct queue_limits *lim) +{ + q->limits = *lim; + + /* + * blk_set_default_limits() sets max_sectors/max_hw_sectors to 0 + * so that blk_stack_limits() appropriately propagate the values + * of lower-stack by min_not_zero(). + * However, if the default value 0 is unchanged (e.g. the stacking + * device is virtual and has no underlying device), it results + * in unusable device. + * Check if max_sectors/max_hw_sectors have non-zero values, + * and set SAFE_MAX_SECTORS if they do. + */ + if (q->limits.max_sectors == 0 || q->limits.max_hw_sectors == 0) + blk_queue_max_sectors(q, SAFE_MAX_SECTORS); +} +EXPORT_SYMBOL(blk_queue_copy_limits); + +/** * blk_queue_make_request - define an alternate make_request function for a device * @q: the request queue for the device to be affected * @mfn: the alternate make_request function Index: linux-2.6.31.work/include/linux/blkdev.h =================================================================== --- linux-2.6.31.work.orig/include/linux/blkdev.h +++ linux-2.6.31.work/include/linux/blkdev.h @@ -917,6 +917,7 @@ extern void blk_limits_io_min(struct que extern void blk_queue_io_min(struct request_queue *q, unsigned int min); extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt); extern void blk_set_default_limits(struct queue_limits *lim); +extern void blk_queue_copy_limits(struct request_queue *q, struct queue_limits *lim); extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, sector_t offset); extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |