As the libnbd API isn't permanently stable until we reach the 1.0
release (expected soon), some code changes are needed to cope with API
changes between 0.9.6 and 0.9.8. In this case we made changes to
completion handlers after feedback from reviewers. This fix for fio
incorporates all the changes needed and bumps the minimum version to
libnbd >= 0.9.8.
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
##########################################
# Check if we have libnbd (for NBD support).
##########################################
# Check if we have libnbd (for NBD support).
if test "$libnbd" = "yes" ; then
if $(pkg-config --atleast-version=$minimum_libnbd libnbd); then
libnbd="yes"
if test "$libnbd" = "yes" ; then
if $(pkg-config --atleast-version=$minimum_libnbd libnbd); then
libnbd="yes"
}
/* A command in flight has been completed. */
}
/* A command in flight has been completed. */
-static int cmd_completed (unsigned valid_flag, void *vp, int *error)
+static int cmd_completed (void *vp, int *error)
{
struct io_u *io_u;
struct nbd_data *nbd_data;
struct io_u **completed;
{
struct io_u *io_u;
struct nbd_data *nbd_data;
struct io_u **completed;
- if (!(valid_flag & LIBNBD_CALLBACK_VALID))
- return 0;
-
io_u = vp;
nbd_data = io_u->engine_data;
io_u = vp;
nbd_data = io_u->engine_data;
struct io_u *io_u)
{
struct nbd_data *nbd_data = td->io_ops_data;
struct io_u *io_u)
{
struct nbd_data *nbd_data = td->io_ops_data;
+ nbd_completion_callback completion = { .callback = cmd_completed,
+ .user_data = io_u };
int r;
fio_ro_check(td, io_u);
int r;
fio_ro_check(td, io_u);
switch (io_u->ddir) {
case DDIR_READ:
switch (io_u->ddir) {
case DDIR_READ:
- r = nbd_aio_pread_callback(nbd_data->nbd,
- io_u->xfer_buf, io_u->xfer_buflen,
- io_u->offset,
- cmd_completed, io_u,
- 0);
+ r = nbd_aio_pread(nbd_data->nbd,
+ io_u->xfer_buf, io_u->xfer_buflen,
+ io_u->offset, completion, 0);
- r = nbd_aio_pwrite_callback(nbd_data->nbd,
- io_u->xfer_buf, io_u->xfer_buflen,
- io_u->offset,
- cmd_completed, io_u,
- 0);
+ r = nbd_aio_pwrite(nbd_data->nbd,
+ io_u->xfer_buf, io_u->xfer_buflen,
+ io_u->offset, completion, 0);
- r = nbd_aio_trim_callback(nbd_data->nbd, io_u->xfer_buflen,
- io_u->offset,
- cmd_completed, io_u,
- 0);
+ r = nbd_aio_trim(nbd_data->nbd, io_u->xfer_buflen,
+ io_u->offset, completion, 0);
break;
case DDIR_SYNC:
/* XXX We could probably also handle
* DDIR_SYNC_FILE_RANGE with a bit of effort.
*/
break;
case DDIR_SYNC:
/* XXX We could probably also handle
* DDIR_SYNC_FILE_RANGE with a bit of effort.
*/
- r = nbd_aio_flush_callback(nbd_data->nbd,
- cmd_completed, io_u,
- 0);
+ r = nbd_aio_flush(nbd_data->nbd, completion, 0);
break;
default:
io_u->error = EINVAL;
break;
default:
io_u->error = EINVAL;