aio: util: pass AIO to streaming write completion callback.
authorAndres Freund <andres@anarazel.de>
Tue, 12 Jan 2021 04:57:38 +0000 (20:57 -0800)
committerAndres Freund <andres@anarazel.de>
Wed, 13 Jan 2021 01:16:25 +0000 (17:16 -0800)
Not yet useful, because there's yet a way to access the result of the
write.

src/backend/access/transam/xlog.c
src/backend/storage/buffer/bufmgr.c
src/backend/storage/ipc/aio_util.c
src/backend/storage/smgr/md.c
src/include/storage/aio.h

index 7456ed536ab7673c9d62a3504bb6752692060567..f67a26dae4c605623e097aa3e002f4a5b531308e 100644 (file)
@@ -4535,7 +4535,7 @@ XLogNeedsFlush(XLogRecPtr record)
 }
 
 static void
-XLogFileInitComplete(void *pgsw_private, void *write_private)
+XLogFileInitComplete(void *pgsw_private, PgAioInProgress *aio, void *write_private)
 {
 }
 
index 6bbcde40830c12bd7359f1d2f2ea3fe91df119b1..075f255224772a3c6a340970616f40ba2eb8ab7a 100644 (file)
@@ -1832,7 +1832,7 @@ typedef struct BulkExtendBufferedState
 } BulkExtendBufferedState;
 
 static void
-bulk_extend_undirty_complete(void *pgsw_private, void *write_private)
+bulk_extend_undirty_complete(void *pgsw_private, PgAioInProgress *aio, void *write_private)
 {
    BulkExtendBufferedState *be_state = (BulkExtendBufferedState * ) pgsw_private;
    BulkExtendOneBuffer *ex_buf = (BulkExtendOneBuffer *) write_private;
@@ -2488,7 +2488,7 @@ UnpinBuffer(BufferDesc *buf, bool fixOwner)
 }
 
 static void
-buffer_sync_complete(void *pgsw_private, void *write_private)
+buffer_sync_complete(void *pgsw_private, PgAioInProgress *aio, void *write_private)
 {
    WritebackContext *wb_context = (WritebackContext *) pgsw_private;
    BufferDesc *bufHdr = (BufferDesc *) write_private;
index e4bf8192cbe1646a6eda1584c48af6ddc2c01bc2..afef091e78081f852519a0a23b896f0e5566ace8 100644 (file)
@@ -157,7 +157,7 @@ pg_streaming_write_complete(PgAioOnCompletionLocalContext *ocb, PgAioInProgress
    dlist_push_tail(&pgsw->available, &this_write->node);
 
    /* call callback after all other handling so it can issue IO */
-   pgsw->on_completion(pgsw->private_data, private_data);
+   pgsw->on_completion(pgsw->private_data, io, private_data);
 
    ereport(DEBUG3, errmsg("complete %zu", this_write - pgsw->all_items),
            errhidestmt(true),
index e197b78df301cf6852c8dbd2caf98595548c9fdb..6fc0a7c4f28ceb31bc3fd481b947de9466981e16 100644 (file)
@@ -482,7 +482,7 @@ mdextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum,
 }
 
 static void
-zeroextend_complete(void *pgsw_private, void *write_private)
+zeroextend_complete(void *pgsw_private, PgAioInProgress *aio, void *write_private)
 {
    BlockNumber *latest = (BlockNumber *) write_private;
 }
index ed8027f5613af3abbd0f5934bb2c2b8eb478aeec..e826b2d2f456b2588bfdacdd53a2ab0c5ceb3c12 100644 (file)
@@ -151,7 +151,7 @@ extern char *pgaio_bounce_buffer_buffer(PgAioBounceBuffer *bb);
  * Helper to efficiently perform bulk writes.
  */
 typedef struct pg_streaming_write pg_streaming_write;
-typedef void (*pg_streaming_write_completed)(void *pgsw_private, void *write_private);
+typedef void (*pg_streaming_write_completed)(void *pgsw_private, PgAioInProgress *aio, void *write_private);
 
 extern pg_streaming_write *pg_streaming_write_alloc(uint32 iodepth, void *private,
                                                    pg_streaming_write_completed on_completion);