Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.3-rc1 53 lines 1.2 kB view raw
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 12struct 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 21struct io_kiocb *io_alloc_notif(struct io_ring_ctx *ctx); 22void io_notif_set_extended(struct io_kiocb *notif); 23 24static inline struct io_notif_data *io_notif_to_data(struct io_kiocb *notif) 25{ 26 return io_kiocb_to_cmd(notif, struct io_notif_data); 27} 28 29static 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 39static 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}