Frank Mayhar <fmay...@google.com> writes: > block: Force sector and nr_sects to device alignment and granularity. > > In blkdev_issue_discard(), rather than sending an improperly- > aligned discard to the device (where it may get an error), > adjust the start and length to the block device alignment and > granularity. Don't fail if this leaves nothing to discard. > > Without this change, certain flash drivers can report invalid > trim parameters (and will fail the command). Per tytso, "given > that discards are advisory, any part of the storage stack is > free to drop discard requests silently."
And how do you get here with misaligned discards? -Jeff > > Signed-off-by: Frank Mayhar <fmay...@google.com> > Reviewed-by: "Theodore Ts'o" <ty...@mit.edu> > > block/blk-lib.c | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/block/blk-lib.c b/block/blk-lib.c > index 97a733c..a4472cd 100644 > --- a/block/blk-lib.c > +++ b/block/blk-lib.c > @@ -61,6 +61,21 @@ int blkdev_issue_discard(struct block_device *bdev, > sector_t sector, > alignment = (bdev_discard_alignment(bdev) >> 9) % granularity; > > /* > + * Force sector and nr_sects to block device alignment and > + * granularity. > + */ > + if (alignment && (sector % alignment)) { > + sector_t adj = alignment - (sector % alignment); > + > + sector += adj; > + nr_sects -= adj; > + } > + if (nr_sects % granularity) > + nr_sects -= nr_sects % granularity; > + if (!nr_sects) > + return ret; > + > + /* > * Ensure that max_discard_sectors is of the proper > * granularity, so that requests stay aligned after a split. > */ > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majord...@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/