linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Woodhouse <dwmw2@infradead.org>
To: Jens Axboe <jens.axboe@oracle.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Ric Wheeler <ricwheeler@gmail.com>,
	linux-fsdevel@vger.kernel.org, gilad@codefidence.com
Subject: Re: [RFC] 'discard sectors' block request.
Date: Tue, 05 Aug 2008 14:32:16 +0100	[thread overview]
Message-ID: <1217943136.3454.730.camel@pmac.infradead.org> (raw)
In-Reply-To: <20080805114210.GW20055@kernel.dk>

On Tue, 2008-08-05 at 13:42 +0200, Jens Axboe wrote:
> I was going to suggest that if you want this sync, then you should cut
> this code out of blkdev_issue_flush() and reuse that helper for
> blkdev_issue_flush and blkdev_issue_discard(). But I don't think the
> sync interface makes a lot of sense. 

Yeah, I agree. That was just for the proof of concept, really.

> Also, get rid of the error_sector stuff. First of all it isn't really
> used consistently in the flush part since most block drivers don't
> have this information (and/or fill it in), and secondly you can just
> store that in bi_sector or whatever instead for this request.

OK.

> int blkdev_issue_discard(struct block_device *bdev, sector_t sector,
> 			 unsigned nr_sects, bio_end_io_t *end_io)
> {
  ...

> That would be the simpler async variant. Let the caller pass in the
> end_io function as well, as the fs would definitely want to check for
> EOPNOTSUPP or other errors itself on completion.

Most of the time the fs doesn't care at all. The whole point is that it
no longer gives a monkey's about the contents of these sectors. It's
just giving the underlying storage an _opportunity_ to reclaim them, if
it wants to do so. Most of the time, a file system isn't going to do
_anything_ with an error other than ignore it.

Even -EOPNOTSUPP isn't massively interesting, because it'll want to
check whether the operation is supported _before_ it bothers to queue
the request, rather than queueing the request unconditionally.

>  Remember to do the bio_put() in there as well at the end. 

Are we allowed to just set the end_io function to &bio_put?

> Perhaps you want a sync interface as well? 

I think we can live without a sync interface. As long as the discard
request is guaranteed to finish before any subsequent write, which is
something for the elevator to care about rather than the caller, we
really don't care when it finishes. If the occasional strange caller
wants to do it synchronously, they can arrange that for themselves.

> Otherwise that akpm said, he covered basically all my points. Lets do a
> 
> static inline int bio_data_less(struct bio *bio)
> {
>         return !bio->bi_io_vec;
> }
> 
> like you suggested for checking whether the bio carries data or not,
> since we need that for the empty barrier as well (and other future bio
> hints we want to pass down).

OK. And for blk_dataless_rq() it would be checking !req->buffer? 

> > @@ -1886,7 +1899,7 @@ static int blk_end_io(struct request *rq, int error, unsigned int nr_bytes,
> >  	struct request_queue *q = rq->q;
> >  	unsigned long flags = 0UL;
> >  
> > -	if (blk_fs_request(rq) || blk_pc_request(rq)) {
> > +	if (blk_fs_request(rq) || blk_pc_request(rq) || blk_discard_rq(rq)) {
> >  		if (__end_that_request_first(rq, error, nr_bytes))
> >  			return 1;
> >  
> > @@ -1944,7 +1957,7 @@ EXPORT_SYMBOL_GPL(blk_end_request);
> >   **/
> >  int __blk_end_request(struct request *rq, int error, unsigned int nr_bytes)
> >  {
> > -	if (blk_fs_request(rq) || blk_pc_request(rq)) {
> > +	if (blk_fs_request(rq) || blk_pc_request(rq) || blk_discard_rq(rq)) {
> >  		if (__end_that_request_first(rq, error, nr_bytes))
> >  			return 1;
> >  	}
> 
> Do you need to call into __end_request_request_first()? You don't need
> to fill error sector now, and there's no bio data to complete.

That's what actually calls the ->end_io function, isn't it? The need to
add that was determined empirically... but at about 2am this morning, so
I'm not going to sulk if you tell me I'm wrong.

We'll probably also want the elevator to merge discard requests. But
that can come later.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation




  reply	other threads:[~2008-08-05 13:32 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <488B7281.4020007@gmail.com>
     [not found] ` <20080726130200.f541e604.akpm@linux-foundation.org>
2008-08-05  1:45   ` [RFC] 'discard sectors' block request David Woodhouse
2008-08-05  1:59     ` Andrew Morton
2008-08-05  9:01       ` David Woodhouse
2008-08-05 11:42     ` Jens Axboe
2008-08-05 13:32       ` David Woodhouse [this message]
2008-08-05 14:21         ` Ric Wheeler
2008-08-05 16:29       ` David Woodhouse
2008-08-05 17:25         ` David Woodhouse
2008-08-06  9:25           ` [PATCH 1/5] [BLOCK] Add 'discard' request handling David Woodhouse
2008-08-06 16:19             ` OGAWA Hirofumi
2008-08-06 18:18               ` David Woodhouse
2008-08-06 19:28                 ` OGAWA Hirofumi
2008-08-07 16:32             ` [PATCH 1/5, v2] " David Woodhouse
2008-08-07 18:41             ` [PATCH 1/5] " Jens Axboe
2008-08-08  9:33               ` David Woodhouse
2008-08-08 10:30                 ` Jens Axboe
2008-08-08 10:49                   ` Jens Axboe
2008-08-08 11:04                     ` David Woodhouse
2008-08-08 11:20                       ` Jens Axboe
2008-08-08 10:52                   ` David Woodhouse
2008-08-08 11:09                     ` Jens Axboe
2008-08-08 11:18                       ` Jens Axboe
2008-08-08 11:29                         ` David Woodhouse
2008-08-08 11:44                           ` Jens Axboe
2008-08-08 11:47                             ` Jens Axboe
2008-08-08 12:05                             ` David Woodhouse
2008-08-08 12:13                               ` Jens Axboe
2008-08-08 12:32                                 ` David Woodhouse
2008-08-08 12:37                                   ` Jens Axboe
2008-08-08 12:49                                     ` David Woodhouse
2008-08-10  1:05                                       ` Jamie Lokier
2008-08-08 15:32                             ` David Woodhouse
2008-08-08 14:22                     ` Matthew Wilcox
2008-08-08 14:27                       ` David Woodhouse
2008-08-08 14:34                         ` Matthew Wilcox
2008-08-06  9:25           ` [PATCH 2/5] [FAT] Let the block device know when sectors can be discarded David Woodhouse
2008-08-06 16:40             ` OGAWA Hirofumi
2008-08-06 17:14               ` OGAWA Hirofumi
2008-08-06 18:11               ` David Woodhouse
2008-08-06 19:10                 ` OGAWA Hirofumi
2008-08-06 19:50                   ` OGAWA Hirofumi
2008-08-06 20:10                     ` OGAWA Hirofumi
2008-08-06 21:37                   ` David Woodhouse
2008-08-07 16:09                     ` David Woodhouse
2008-08-07 16:33             ` [PATCH 2/5, v2] " David Woodhouse
2008-08-06  9:25           ` [PATCH 3/5] [MTD] Support 'discard sectors' operation in translation layer support core David Woodhouse
2008-08-06  9:25           ` [PATCH 4/5] [MTD] [FTL] Support 'discard sectors' operation David Woodhouse
2008-08-06  9:25           ` [PATCH 5/5] [BLOCK] Fix up comments about matching flags between bio and rq David Woodhouse

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1217943136.3454.730.camel@pmac.infradead.org \
    --to=dwmw2@infradead.org \
    --cc=akpm@linux-foundation.org \
    --cc=gilad@codefidence.com \
    --cc=jens.axboe@oracle.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=ricwheeler@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).