LCOV - code coverage report
Current view: top level - io_uring - notif.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 1 0.0 %
Date: 2023-04-06 08:38:28 Functions: 0 0 -

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0
       2             : 
       3             : #include <linux/net.h>
       4             : #include <linux/uio.h>
       5             : #include <net/sock.h>
       6             : #include <linux/nospec.h>
       7             : 
       8             : #include "rsrc.h"
       9             : 
      10             : #define IO_NOTIF_SPLICE_BATCH   32
      11             : 
      12             : struct io_notif_data {
      13             :         struct file             *file;
      14             :         struct ubuf_info        uarg;
      15             :         unsigned long           account_pages;
      16             :         bool                    zc_report;
      17             :         bool                    zc_used;
      18             :         bool                    zc_copied;
      19             : };
      20             : 
      21             : struct io_kiocb *io_alloc_notif(struct io_ring_ctx *ctx);
      22             : void io_notif_set_extended(struct io_kiocb *notif);
      23             : 
      24             : static inline struct io_notif_data *io_notif_to_data(struct io_kiocb *notif)
      25             : {
      26           0 :         return io_kiocb_to_cmd(notif, struct io_notif_data);
      27             : }
      28             : 
      29             : static inline void io_notif_flush(struct io_kiocb *notif)
      30             :         __must_hold(&notif->ctx->uring_lock)
      31             : {
      32             :         struct io_notif_data *nd = io_notif_to_data(notif);
      33             : 
      34             :         /* drop slot's master ref */
      35             :         if (refcount_dec_and_test(&nd->uarg.refcnt))
      36             :                 io_req_task_work_add(notif);
      37             : }
      38             : 
      39             : static inline int io_notif_account_mem(struct io_kiocb *notif, unsigned len)
      40             : {
      41             :         struct io_ring_ctx *ctx = notif->ctx;
      42             :         struct io_notif_data *nd = io_notif_to_data(notif);
      43             :         unsigned nr_pages = (len >> PAGE_SHIFT) + 2;
      44             :         int ret;
      45             : 
      46             :         if (ctx->user) {
      47             :                 ret = __io_account_mem(ctx->user, nr_pages);
      48             :                 if (ret)
      49             :                         return ret;
      50             :                 nd->account_pages += nr_pages;
      51             :         }
      52             :         return 0;
      53             : }

Generated by: LCOV version 1.14