Messages in this thread | | | Date | Wed, 27 Nov 2013 04:54:05 -0800 | From | Christoph Hellwig <> | Subject | Re: [PATCH 4/5] blk-lib.c: generic_make_request() handles large bios now |
| |
> int blkdev_issue_discard(struct block_device *bdev, sector_t sector, > sector_t nr_sects, gfp_t gfp_mask, unsigned long flags) > { > - DECLARE_COMPLETION_ONSTACK(wait); > struct request_queue *q = bdev_get_queue(bdev); > int type = REQ_WRITE | REQ_DISCARD; > - unsigned int max_discard_sectors, granularity; > - int alignment; > - struct bio_batch bb; > struct bio *bio; > int ret = 0; > - struct blk_plug plug; > > if (!q) > return -ENXIO; > @@ -56,78 +34,28 @@ int blkdev_issue_discard(struct block_device *bdev, sector_t sector, > if (!blk_queue_discard(q)) > return -EOPNOTSUPP; > > - /* Zero-sector (unknown) and one-sector granularities are the same. */ > - granularity = max(q->limits.discard_granularity >> 9, 1U); > - alignment = (bdev_discard_alignment(bdev) >> 9) % granularity; > - > - /* > - * Ensure that max_discard_sectors is of the proper > - * granularity, so that requests stay aligned after a split. > - */ > - max_discard_sectors = min(q->limits.max_discard_sectors, UINT_MAX >> 9); > - max_discard_sectors -= max_discard_sectors % granularity;
Seems like this is also missing the code to trim down the request to be properly aligned to the device limit. I don't think our low-level drivers are ready to handle this, and even if they were it should be a separate change.
| |