diff options
author | David Woodhouse <David.Woodhouse@intel.com> | 2008-08-05 13:01:53 -0400 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2008-10-09 02:56:01 -0400 |
commit | fb2dce862d9f9a68e6b9374579056ec9eca02a63 (patch) | |
tree | 888e0fd7248c9329fa1aa3981043a2dc2457d488 /block/blk-settings.c | |
parent | d628eaef310533767ce68664873869c2d7f78f09 (diff) |
Add 'discard' request handling
Some block devices benefit from a hint that they can forget the contents
of certain sectors. Add basic support for this to the block core, along
with a 'blkdev_issue_discard()' helper function which issues such
requests.
The caller doesn't get to provide an end_io functio, since
blkdev_issue_discard() will automatically split the request up into
multiple bios if appropriate. Neither does the function wait for
completion -- it's expected that callers won't care about when, or even
_if_, the request completes. It's only a hint to the device anyway. By
definition, the file system doesn't _care_ about these sectors any more.
[With feedback from OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> and
Jens Axboe <jens.axboe@oracle.com]
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'block/blk-settings.c')
-rw-r--r-- | block/blk-settings.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/block/blk-settings.c b/block/blk-settings.c index dfc77012843f..539d873c820d 100644 --- a/block/blk-settings.c +++ b/block/blk-settings.c | |||
@@ -33,6 +33,23 @@ void blk_queue_prep_rq(struct request_queue *q, prep_rq_fn *pfn) | |||
33 | EXPORT_SYMBOL(blk_queue_prep_rq); | 33 | EXPORT_SYMBOL(blk_queue_prep_rq); |
34 | 34 | ||
35 | /** | 35 | /** |
36 | * blk_queue_set_discard - set a discard_sectors function for queue | ||
37 | * @q: queue | ||
38 | * @dfn: prepare_discard function | ||
39 | * | ||
40 | * It's possible for a queue to register a discard callback which is used | ||
41 | * to transform a discard request into the appropriate type for the | ||
42 | * hardware. If none is registered, then discard requests are failed | ||
43 | * with %EOPNOTSUPP. | ||
44 | * | ||
45 | */ | ||
46 | void blk_queue_set_discard(struct request_queue *q, prepare_discard_fn *dfn) | ||
47 | { | ||
48 | q->prepare_discard_fn = dfn; | ||
49 | } | ||
50 | EXPORT_SYMBOL(blk_queue_set_discard); | ||
51 | |||
52 | /** | ||
36 | * blk_queue_merge_bvec - set a merge_bvec function for queue | 53 | * blk_queue_merge_bvec - set a merge_bvec function for queue |
37 | * @q: queue | 54 | * @q: queue |
38 | * @mbfn: merge_bvec_fn | 55 | * @mbfn: merge_bvec_fn |