All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bart Van Assche <Bart.VanAssche@sandisk.com>
To: "hare@suse.de" <hare@suse.de>, "snitzer@redhat.com" <snitzer@redhat.com>
Cc: "dm-devel@redhat.com" <dm-devel@redhat.com>,
	"hch@lst.de" <hch@lst.de>, "hare@suse.com" <hare@suse.com>,
	"stable@vger.kernel.org" <stable@vger.kernel.org>
Subject: Re: [dm-devel] [PATCH 02/13] dm-mpath: Avoid that path removal can trigger an infinite loop
Date: Thu, 27 Apr 2017 15:11:43 +0000	[thread overview]
Message-ID: <1493305901.2625.1.camel@sandisk.com> (raw)
In-Reply-To: <fabbb802-5743-1193-3d4e-841404db2372@suse.de>

On Thu, 2017-04-27 at 07:46 +0200, Hannes Reinecke wrote:
> On 04/26/2017 08:37 PM, Bart Van Assche wrote:
> > +	clone = blk_get_request(q, rq->cmd_flags | REQ_NOMERGE, GFP_ATOMIC);
> >  	if (IS_ERR(clone)) {
> >  		/* EBUSY, ENODEV or EWOULDBLOCK: requeue */
> > -		return r;
> > +		pr_debug("blk_get_request() returned %ld%s - requeuing\n",
> > +			 PTR_ERR(clone), blk_queue_dying(q) ?
> > +			 " (path offline)" : "");
> > +		if (blk_queue_dying(q)) {
> > +			atomic_inc(&m->pg_init_in_progress);
> > +			activate_path(pgpath);
> > +			return DM_MAPIO_REQUEUE;
> > +		}
> > +		return DM_MAPIO_DELAY_REQUEUE;
> >  	}
> >  	clone->bio = clone->biotail = NULL;
> >  	clone->rq_disk = bdev->bd_disk;
> 
> At the very least this does warrant some inline comments.
> Why do we call activate_path() here, seeing that the queue is dying?

Hello Hannes,

activate_path() is not only able to activate a path but can also change
the state of a path to offline. The body of the activate_path() function
makes that clear and that is why I had not added a comment above the
activate_path() call:

static void activate_path(struct pgpath *pgpath)
{
	struct request_queue *q = bdev_get_queue(pgpath->path.dev->bdev);

	if (pgpath->is_active && !blk_queue_dying(q))
		scsi_dh_activate(q, pg_init_done, pgpath);
	else
		pg_init_done(pgpath, SCSI_DH_DEV_OFFLINED);
}

Bart.

  reply	other threads:[~2017-04-27 15:11 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-26 18:37 [PATCH 00/13] Device mapper and dm-mpath patches Bart Van Assche
2017-04-26 18:37 ` [PATCH 01/13] dm-mpath: Split activate_path() Bart Van Assche
2017-04-26 18:37   ` Bart Van Assche
2017-04-26 18:37 ` [PATCH 02/13] dm-mpath: Avoid that path removal can trigger an infinite loop Bart Van Assche
2017-04-26 18:37   ` Bart Van Assche
2017-04-27  5:46   ` [dm-devel] " Hannes Reinecke
2017-04-27  5:46     ` Hannes Reinecke
2017-04-27 15:11     ` Bart Van Assche [this message]
2017-04-27 15:13       ` Hannes Reinecke
2017-04-27 15:13         ` [dm-devel] " Hannes Reinecke
2017-04-27 15:36         ` Mike Snitzer
2017-04-26 18:37 ` [PATCH 03/13] dm-mpath: Delay requeuing while path initialization is in progress Bart Van Assche
2017-04-26 18:37   ` Bart Van Assche
2017-04-27  5:47   ` [dm-devel] " Hannes Reinecke
2017-04-27  5:47     ` Hannes Reinecke
2017-04-26 18:37 ` [PATCH 04/13] dm-rq: Adjust requeuing delays Bart Van Assche
2017-04-27  5:48   ` Hannes Reinecke
2017-04-26 18:37 ` [PATCH 05/13] dm-mpath: Make it easier to analyze requeuing behavior Bart Van Assche
2017-04-27  5:49   ` Hannes Reinecke
2017-04-26 18:37 ` [PATCH 06/13] dm-rq: Check blk_mq_register_dev() return value Bart Van Assche
2017-04-27  5:49   ` Hannes Reinecke
2017-04-26 18:37 ` [PATCH 07/13] dm, persistence: Remove an unused argument from dm_block_manager_create() Bart Van Assche
2017-04-27  5:49   ` Hannes Reinecke
2017-04-26 18:37 ` [PATCH 08/13] dm: Verify suspend_locking assumptions at runtime Bart Van Assche
2017-04-27  5:50   ` Hannes Reinecke
2017-04-27  6:05   ` Hannes Reinecke
2017-04-26 18:37 ` [PATCH 09/13] dm-mpath: Verify locking " Bart Van Assche
2017-04-27  5:50   ` Hannes Reinecke
2017-04-26 18:37 ` [PATCH 10/13] dm: Introduce enum dm_queue_mode Bart Van Assche
2017-04-27  5:51   ` Hannes Reinecke
2017-04-26 18:37 ` [PATCH 11/13] dm-mpath: Micro-optimize the hot path Bart Van Assche
2017-04-27  6:36   ` Hannes Reinecke
2017-04-26 18:37 ` [PATCH 12/13] dm-mpath: Introduce assign_bit() Bart Van Assche
2017-04-27  6:40   ` Hannes Reinecke
2017-04-26 18:37 ` [PATCH 13/13] dm, dm-mpath: Make it easier to detect unintended I/O request flushes Bart Van Assche
2017-04-27  6:41   ` Hannes Reinecke

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=1493305901.2625.1.camel@sandisk.com \
    --to=bart.vanassche@sandisk.com \
    --cc=dm-devel@redhat.com \
    --cc=hare@suse.com \
    --cc=hare@suse.de \
    --cc=hch@lst.de \
    --cc=snitzer@redhat.com \
    --cc=stable@vger.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.