bdev/aio: unregister io_device when aio bdev is deleted
Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: I2ec7387292854f93cee00edc15e9dfeb4019b8b0 Reviewed-on: https://review.gerrithub.io/420443 Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
703d1f80a8
commit
bb684fe75e
@ -192,7 +192,6 @@ bdev_aio_destruct(void *ctx)
|
||||
if (rc < 0) {
|
||||
SPDK_ERRLOG("bdev_aio_close() failed\n");
|
||||
}
|
||||
aio_free_disk(fdisk);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -546,15 +545,44 @@ error_return:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
aio_io_device_unregister_cb(void *io_device)
|
||||
{
|
||||
struct file_disk *fdisk = io_device;
|
||||
spdk_delete_aio_complete cb_fn = fdisk->delete_cb_fn;
|
||||
void *cb_arg = fdisk->delete_cb_arg;
|
||||
|
||||
aio_free_disk(fdisk);
|
||||
cb_fn(cb_arg, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
aio_bdev_unregister_cb(void *arg, int bdeverrno)
|
||||
{
|
||||
struct file_disk *fdisk = arg;
|
||||
|
||||
if (bdeverrno != 0) {
|
||||
fdisk->delete_cb_fn(fdisk->delete_cb_arg, bdeverrno);
|
||||
return;
|
||||
}
|
||||
|
||||
spdk_io_device_unregister(fdisk, aio_io_device_unregister_cb);
|
||||
}
|
||||
|
||||
void
|
||||
delete_aio_disk(struct spdk_bdev *bdev, spdk_delete_aio_complete cb_fn, void *cb_arg)
|
||||
{
|
||||
struct file_disk *fdisk;
|
||||
|
||||
if (!bdev || bdev->module != &aio_if) {
|
||||
cb_fn(cb_arg, -ENODEV);
|
||||
return;
|
||||
}
|
||||
|
||||
spdk_bdev_unregister(bdev, cb_fn, cb_arg);
|
||||
fdisk = bdev->ctxt;
|
||||
fdisk->delete_cb_fn = cb_fn;
|
||||
fdisk->delete_cb_arg = cb_arg;
|
||||
spdk_bdev_unregister(bdev, aio_bdev_unregister_cb, fdisk);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -55,6 +55,8 @@ struct bdev_aio_io_channel {
|
||||
uint64_t io_inflight;
|
||||
};
|
||||
|
||||
typedef void (*spdk_delete_aio_complete)(void *cb_arg, int bdeverrno);
|
||||
|
||||
struct file_disk {
|
||||
struct bdev_aio_task *reset_task;
|
||||
struct spdk_poller *reset_retry_timer;
|
||||
@ -63,10 +65,10 @@ struct file_disk {
|
||||
int fd;
|
||||
TAILQ_ENTRY(file_disk) link;
|
||||
bool block_size_override;
|
||||
spdk_delete_aio_complete delete_cb_fn;
|
||||
void *delete_cb_arg;
|
||||
};
|
||||
|
||||
typedef void (*spdk_delete_aio_complete)(void *cb_arg, int bdeverrno);
|
||||
|
||||
struct spdk_bdev *create_aio_disk(const char *name, const char *filename, uint32_t block_size);
|
||||
|
||||
void delete_aio_disk(struct spdk_bdev *bdev, spdk_delete_aio_complete cb_fn, void *cb_arg);
|
||||
|
Loading…
x
Reference in New Issue
Block a user