Commit 73265f3f authored by Mike Snitzer's avatar Mike Snitzer
Browse files

dm mpath: push locking down to must_push_back_rq()



Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
parent a271a89c
Loading
Loading
Loading
Loading
+14 −11
Original line number Diff line number Diff line
@@ -472,7 +472,14 @@ static bool __must_push_back(struct multipath *m)

static bool must_push_back_rq(struct multipath *m)
{
	return test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags) || __must_push_back(m);
	unsigned long flags;
	bool ret;

	spin_lock_irqsave(&m->lock, flags);
	ret = (test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags) || __must_push_back(m));
	spin_unlock_irqrestore(&m->lock, flags);

	return ret;
}

/*
@@ -1621,17 +1628,13 @@ static int multipath_end_io(struct dm_target *ti, struct request *clone,
		if (pgpath)
			fail_path(pgpath);

		if (!atomic_read(&m->nr_valid_paths)) {
			unsigned long flags;
			spin_lock_irqsave(&m->lock, flags);
			if (!must_push_back_rq(m)) {
		if (!atomic_read(&m->nr_valid_paths) &&
		    !must_push_back_rq(m)) {
			if (error == BLK_STS_IOERR)
				dm_report_EIO(m);
			/* complete with the original error */
			r = DM_ENDIO_DONE;
		}
			spin_unlock_irqrestore(&m->lock, flags);
		}
	}

	if (pgpath) {