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-08-24 13:40:31 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_UBUF_FLAGS     (SKBFL_ZEROCOPY_FRAG | SKBFL_DONT_ORPHAN)
      11             : #define IO_NOTIF_SPLICE_BATCH   32
      12             : 
      13             : struct io_notif_data {
      14             :         struct file             *file;
      15             :         struct ubuf_info        uarg;
      16             :         unsigned long           account_pages;
      17             :         bool                    zc_report;
      18             :         bool                    zc_used;
      19             :         bool                    zc_copied;
      20             : };
      21             : 
      22             : struct io_kiocb *io_alloc_notif(struct io_ring_ctx *ctx);
      23             : void io_notif_set_extended(struct io_kiocb *notif);
      24             : 
      25             : static inline struct io_notif_data *io_notif_to_data(struct io_kiocb *notif)
      26             : {
      27           0 :         return io_kiocb_to_cmd(notif, struct io_notif_data);
      28             : }
      29             : 
      30             : static inline void io_notif_flush(struct io_kiocb *notif)
      31             :         __must_hold(&notif->ctx->uring_lock)
      32             : {
      33             :         struct io_notif_data *nd = io_notif_to_data(notif);
      34             : 
      35             :         /* drop slot's master ref */
      36             :         if (refcount_dec_and_test(&nd->uarg.refcnt))
      37             :                 __io_req_task_work_add(notif, IOU_F_TWQ_LAZY_WAKE);
      38             : }
      39             : 
      40             : static inline int io_notif_account_mem(struct io_kiocb *notif, unsigned len)
      41             : {
      42             :         struct io_ring_ctx *ctx = notif->ctx;
      43             :         struct io_notif_data *nd = io_notif_to_data(notif);
      44             :         unsigned nr_pages = (len >> PAGE_SHIFT) + 2;
      45             :         int ret;
      46             : 
      47             :         if (ctx->user) {
      48             :                 ret = __io_account_mem(ctx->user, nr_pages);
      49             :                 if (ret)
      50             :                         return ret;
      51             :                 nd->account_pages += nr_pages;
      52             :         }
      53             :         return 0;
      54             : }

Generated by: LCOV version 1.14