Note: "permalinks" may not be as permanent as we would like,
direct links of old sources may well be a few messages off.
On Fri, Aug 7, 2015 at 5:30 PM, Kent Overstreet <kent.overstreet at gmail.com> wrote: > On Fri, Aug 07, 2015 at 04:40:06PM -0700, Ming Lin wrote: >> >> On Fri, 2015-08-07 at 09:30 +0200, Christoph Hellwig wrote: >> > I'm for solution 3: >> > >> > - keep blk_bio_{discard,write_same}_split, but ensure we never built >> > a > 4GB bio in blkdev_issue_{discard,write_same}. >> >> This has problem as I mentioned in solution 1. >> We need to also make sure max discard size is of proper granularity. >> See below example. >> >> 4G: 8388608 sectors >> UINT_MAX: 8388607 sectors >> >> dm-thinp block size = default discard granularity = 128 sectors >> >> blkdev_issue_discard(sector=0, nr_sectors=8388608) >> >> 1. Only ensure bi_size not overflow >> >> It doesn't work. >> >> [start_sector, end_sector] >> [0, 8388607] >> [0, 8388606], then dm-thinp splits it to 2 bios >> [0, 8388479] >> [8388480, 8388606] ---> this has problem in process_discard_bio(), >> because the discard size(7 sectors) covers less than a block(128 sectors) >> [8388607, 8388607] ---> same problem >> >> 2. Ensure bi_size not overflow and max discard size is of proper granularity > > Ideally we'd get upper layers out of the business of knowing about the queue > limits at all - that was the point of the patch series, after all. > > Instead of using UINT_MAX, would it work to just make the max 1 << 31 sectors?' 1 << 31 = 2G bytes = 0x400000 sectors. Yes, that works as long as it's multiple of granularity.