Commit 2b867a50 authored by Artur Paszkiewicz's avatar Artur Paszkiewicz Committed by Tomasz Zawadzki
Browse files

module/raid: raid_io custom completion callback



Allow raid modules to override raid_io completion. This can be used to
add some additional processing before completing the actual raid
bdev_io.

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


Community-CI: Mellanox Build Bot
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent a4e1703e
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@
#include "spdk/string.h"
#include "spdk/util.h"
#include "spdk/json.h"
#include "spdk/likely.h"

static bool g_shutdown_started = false;

@@ -308,8 +309,12 @@ raid_bdev_io_complete(struct raid_bdev_io *raid_io, enum spdk_bdev_io_status sta
{
	struct spdk_bdev_io *bdev_io = spdk_bdev_io_from_ctx(raid_io);

	if (spdk_unlikely(raid_io->completion_cb != NULL)) {
		raid_io->completion_cb(raid_io, status);
	} else {
		spdk_bdev_io_complete(bdev_io, status);
	}
}

/*
 * brief:
@@ -488,6 +493,7 @@ raid_bdev_io_init(struct raid_bdev_io *raid_io, struct raid_bdev_io_channel *rai
	raid_io->base_bdev_io_remaining = 0;
	raid_io->base_bdev_io_submitted = 0;
	raid_io->base_bdev_io_status = SPDK_BDEV_IO_STATUS_SUCCESS;
	raid_io->completion_cb = NULL;
}

/*
+7 −0
Original line number Diff line number Diff line
@@ -95,6 +95,10 @@ struct raid_base_bdev_info {
	bool			is_configured;
};

struct raid_bdev_io;
typedef void (*raid_bdev_io_completion_cb)(struct raid_bdev_io *raid_io,
		enum spdk_bdev_io_status status);

/*
 * raid_bdev_io is the context part of bdev_io. It contains the information
 * related to bdev_io for a raid bdev
@@ -125,6 +129,9 @@ struct raid_bdev_io {

	/* Private data for the raid module */
	void				*module_private;

	/* Custom completion callback. Overrides bdev_io completion if set. */
	raid_bdev_io_completion_cb	completion_cb;
};

/*
+5 −1
Original line number Diff line number Diff line
@@ -202,8 +202,12 @@ static void raid_test_bdev_io_complete(struct raid_bdev_io *raid_io,
void
raid_bdev_io_complete(struct raid_bdev_io *raid_io, enum spdk_bdev_io_status status)
{
	if (raid_io->completion_cb != NULL) {
		raid_io->completion_cb(raid_io, status);
	} else {
		raid_test_bdev_io_complete(raid_io, status);
	}
}

bool
raid_bdev_io_complete_part(struct raid_bdev_io *raid_io, uint64_t completed,