Commit 0a5d8f0a authored by Artur Paszkiewicz's avatar Artur Paszkiewicz Committed by Tomasz Zawadzki
Browse files

raid5f: fix missing stripe_request release in xor error path



Change-Id: Ibcdace7d88fa142f8923756c380b860abe4806a1
Signed-off-by: default avatarArtur Paszkiewicz <artur.paszkiewicz@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/18387


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Community-CI: Mellanox Build Bot
parent 8d1993a5
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -159,16 +159,21 @@ static void raid5f_xor_stripe_retry(struct stripe_request *stripe_req);
static void
raid5f_xor_stripe_done(struct stripe_request *stripe_req)
{
	struct raid5f_io_channel *r5ch = stripe_req->r5ch;

	if (stripe_req->xor.status != 0) {
		struct raid_bdev_io *raid_io = stripe_req->raid_io;

		SPDK_ERRLOG("stripe xor failed: %s\n", spdk_strerror(-stripe_req->xor.status));
		raid_bdev_io_complete(stripe_req->raid_io, SPDK_BDEV_IO_STATUS_FAILED);
		raid5f_stripe_request_release(stripe_req);
		raid_bdev_io_complete(raid_io, SPDK_BDEV_IO_STATUS_FAILED);
	} else {
		raid5f_stripe_request_submit_chunks(stripe_req);
	}

	if (!TAILQ_EMPTY(&stripe_req->r5ch->xor_retry_queue)) {
		stripe_req = TAILQ_FIRST(&stripe_req->r5ch->xor_retry_queue);
		TAILQ_REMOVE(&stripe_req->r5ch->xor_retry_queue, stripe_req, link);
	if (!TAILQ_EMPTY(&r5ch->xor_retry_queue)) {
		stripe_req = TAILQ_FIRST(&r5ch->xor_retry_queue);
		TAILQ_REMOVE(&r5ch->xor_retry_queue, stripe_req, link);
		raid5f_xor_stripe_retry(stripe_req);
	}
}