-/* with osp::opd_async_requests_mutex held */
-int osp_insert_async_update(const struct lu_env *env,
- struct dt_update_request *update, int op,
- struct osp_object *obj, int count,
- int *lens, const char **bufs, void *data,
- osp_async_update_interpterer_t interpterer)
+/**
+ * Insert an asynchronous idempotent request to the shared request queue that
+ * is attached to the osp_device.
+ *
+ * This function generates a new osp_async_request with the given parameters,
+ * then tries to insert the request into the osp_device-based shared request
+ * queue. If the queue is full, then triggers the packaged OUT RPC to purge
+ * the shared queue firstly, and then re-tries.
+ *
+ * NOTE: must hold the osp::opd_async_requests_mutex to serialize concurrent
+ * osp_insert_async_request call from others.
+ *
+ * \param[in] env pointer to the thread context
+ * \param[in] op operation type, see 'enum update_type'
+ * \param[in] obj pointer to the operation target
+ * \param[in] count array size of the subsequent @lens and @bufs
+ * \param[in] lens buffer length array for the subsequent @bufs
+ * \param[in] bufs the buffers to compose the request
+ * \param[in] data pointer to the data used by the interpreter
+ * \param[in] interpreter pointer to the interpreter function
+ *
+ * \retval 0 for success
+ * \retval negative error number on failure
+ */
+int osp_insert_async_request(const struct lu_env *env, enum update_type op,
+ struct osp_object *obj, int count,
+ __u16 *lens, const void **bufs, void *data,
+ osp_async_request_interpreter_t interpreter)