@@ -2538,6 +2538,8 @@ int cl_sync_io_wait(const struct lu_env *env, struct cl_sync_io *anchor,
void cl_sync_io_note(const struct lu_env *env, struct cl_sync_io *anchor,
int ioret);
struct cl_dio_aio *cl_aio_alloc(struct kiocb *iocb);
+void cl_aio_free(struct cl_dio_aio *aio);
+
static inline void cl_sync_io_init(struct cl_sync_io *anchor, int nr)
{
cl_sync_io_init_notify(anchor, nr, NULL, NULL);
@@ -384,7 +384,7 @@ static ssize_t ll_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
vio->u.write.vui_written += tot_bytes;
result = tot_bytes;
}
- kfree(aio);
+ cl_aio_free(aio);
} else {
result = -EIOCBQUEUED;
}
@@ -1106,6 +1106,13 @@ struct cl_dio_aio *cl_aio_alloc(struct kiocb *iocb)
}
EXPORT_SYMBOL(cl_aio_alloc);
+void cl_aio_free(struct cl_dio_aio *aio)
+{
+ if (aio)
+ kmem_cache_free(cl_dio_aio_kmem, aio);
+}
+EXPORT_SYMBOL(cl_aio_free);
+
/**
* Indicate that transfer of a single page completed.
*/
@@ -1143,8 +1150,7 @@ void cl_sync_io_note(const struct lu_env *env, struct cl_sync_io *anchor,
* If anchor->csi_aio is set, we are responsible for freeing
* memory here rather than when cl_sync_io_wait() completes.
*/
- if (aio)
- kmem_cache_free(cl_dio_aio_kmem, aio);
+ cl_aio_free(aio);
}
}
EXPORT_SYMBOL(cl_sync_io_note);