io_uring: add rsrc referencing for notifiers
[linux-2.6-microblaze.git] / io_uring / notif.c
index aec74f8..0a2e98b 100644 (file)
@@ -7,10 +7,12 @@
 
 #include "io_uring.h"
 #include "notif.h"
+#include "rsrc.h"
 
 static void __io_notif_complete_tw(struct callback_head *cb)
 {
        struct io_notif *notif = container_of(cb, struct io_notif, task_work);
+       struct io_rsrc_node *rsrc_node = notif->rsrc_node;
        struct io_ring_ctx *ctx = notif->ctx;
 
        if (likely(notif->task)) {
@@ -25,6 +27,7 @@ static void __io_notif_complete_tw(struct callback_head *cb)
        ctx->notif_locked_nr++;
        io_cq_unlock_post(ctx);
 
+       io_rsrc_put_node(rsrc_node, 1);
        percpu_ref_put(&ctx->refs);
 }
 
@@ -119,6 +122,8 @@ struct io_notif *io_alloc_notif(struct io_ring_ctx *ctx,
        /* master ref owned by io_notif_slot, will be dropped on flush */
        refcount_set(&notif->uarg.refcnt, 1);
        percpu_ref_get(&ctx->refs);
+       notif->rsrc_node = ctx->rsrc_node;
+       io_charge_rsrc_node(ctx);
        return notif;
 }