public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@infradead.org>
To: Tejun Heo <tj@kernel.org>
Cc: axboe@kernel.dk, linux-kernel@vger.kernel.org, bzolnier@gmail.com
Subject: Re: [PATCH 09/14] block: clean up request completion API
Date: Tue, 21 Apr 2009 13:59:19 -0400	[thread overview]
Message-ID: <20090421175919.GA11671@infradead.org> (raw)
In-Reply-To: <1240331881-28218-10-git-send-email-tj@kernel.org>

>  /**
> + * __blk_end_io - Generic end_io function to complete a request.
>   * @rq:           the request being processed
>   * @error:        %0 for success, < %0 for error
>   * @nr_bytes:     number of bytes to complete @rq
>   * @bidi_bytes:   number of bytes to complete @rq->next_rq
> + * @locked:	  whether rq->q->queue_lock is held on entry
>   *
>   * Description:
>   *     Ends I/O on a number of bytes attached to @rq and @rq->next_rq.
>   *     If @rq has leftover, sets it up for the next range of segments.
>   *
>   * Return:
> + *     %false - we are done with this request
> + *     %true  - this request is not freed yet, it still has pending buffers.
>   **/
> +bool __blk_end_io(struct request *rq, int error, unsigned int nr_bytes,
> +		  unsigned int bidi_bytes, bool locked)
>  {
>  	struct request_queue *q = rq->q;
>  	unsigned long flags = 0UL;
>  
> +	if (blk_update_request(rq, error, nr_bytes))
> +		return true;
>  
> +	/* Bidi request must be completed as a whole */
> +	if (unlikely(blk_bidi_rq(rq)) &&
> +	    blk_update_request(rq->next_rq, error, bidi_bytes))
> +		return true;
>  
>  	add_disk_randomness(rq->rq_disk);
>  
> +	if (!locked) {
> +		spin_lock_irqsave(q->queue_lock, flags);
> +		finish_request(rq, error);
> +		spin_unlock_irqrestore(q->queue_lock, flags);
> +	} else
> +		finish_request(rq, error);
>  
> +	return false;
>  }
> +EXPORT_SYMBOL_GPL(__blk_end_io);

That's really ugly code due to the locked argument.  Just make a helper
for all code down to add_disk_randomness, and have two different
functions call that and finish_request +/- the locking.


  reply	other threads:[~2009-04-21 17:59 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-21 16:37 [GIT PATCH linux-2.6-block] block: cleanup patches, take#3 Tejun Heo
2009-04-21 16:37 ` [PATCH 01/14] block: merge blk_invoke_request_fn() into __blk_run_queue() Tejun Heo
2009-04-21 16:37 ` [PATCH 02/14] block: kill blk_start_queueing() Tejun Heo
2009-04-21 16:37 ` [PATCH 03/14] block: don't set REQ_NOMERGE unnecessarily Tejun Heo
2009-04-21 16:37 ` [PATCH 04/14] block: cleanup REQ_SOFTBARRIER usages Tejun Heo
2009-04-21 16:37 ` [PATCH 05/14] block: clean up misc stuff after block layer timeout conversion Tejun Heo
2009-04-21 16:37 ` [PATCH 06/14] block: reorder request completion functions Tejun Heo
2009-04-21 16:37 ` [PATCH 07/14] block: reorganize request fetching functions Tejun Heo
2009-04-21 17:07   ` Christoph Hellwig
2009-04-22 10:09     ` Jens Axboe
2009-04-23  1:23       ` Tejun Heo
2009-04-21 16:37 ` [PATCH 08/14] block: kill blk_end_request_callback() Tejun Heo
2009-04-21 16:37 ` [PATCH 09/14] block: clean up request completion API Tejun Heo
2009-04-21 17:59   ` Christoph Hellwig [this message]
2009-04-23  1:24     ` Tejun Heo
2009-04-23  2:08       ` [PATCH UPDATED " Tejun Heo
2009-04-23  9:43         ` Boaz Harrosh
2009-04-23  9:59           ` Tejun Heo
2009-04-21 16:37 ` [PATCH 10/14] block: move rq->start_time initialization to blk_rq_init() Tejun Heo
2009-04-21 16:37 ` [PATCH 11/14] block: implement and use [__]blk_end_request_all() Tejun Heo
2009-04-21 16:37 ` [PATCH 12/14] block: replace end_request() with [__]blk_end_request_cur() Tejun Heo
2009-04-21 18:25   ` Joerg Dorchain
2009-04-21 20:35   ` Laurent Vivier
2009-04-22  9:25   ` Geert Uytterhoeven
2009-04-22 16:04   ` Grant Likely
2009-04-21 16:38 ` [PATCH 13/14] block: don't abuse rq->data Tejun Heo
2009-04-21 16:38 ` [PATCH 14/14] block-kill-data Tejun Heo
2009-04-21 16:42   ` [PATCH 14/14] block: kill rq->data Tejun Heo
2009-04-22 10:10 ` [GIT PATCH linux-2.6-block] block: cleanup patches, take#3 Jens Axboe
2009-04-23  2:10   ` Tejun Heo
2009-04-23  6:09     ` Jens Axboe
  -- strict thread matches above, loose matches on Subject: below --
2009-03-13  5:02 [GIT PATCH] block: cleanup patches Tejun Heo
2009-03-13  5:02 ` [PATCH 09/14] block: clean up request completion API Tejun Heo
2009-03-16  9:12   ` Boaz Harrosh
2009-03-16  9:45     ` Tejun Heo

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=20090421175919.GA11671@infradead.org \
    --to=hch@infradead.org \
    --cc=axboe@kernel.dk \
    --cc=bzolnier@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tj@kernel.org \
    /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