~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/splice.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 /*
  3  * Function declerations and data structures related to the splice
  4  * implementation.
  5  *
  6  * Copyright (C) 2007 Jens Axboe <jens.axboe@oracle.com>
  7  *
  8  */
  9 #ifndef SPLICE_H
 10 #define SPLICE_H
 11 
 12 #include <linux/pipe_fs_i.h>
 13 
 14 /*
 15  * Flags passed in from splice/tee/vmsplice
 16  */
 17 #define SPLICE_F_MOVE   (0x01)  /* move pages instead of copying */
 18 #define SPLICE_F_NONBLOCK (0x02) /* don't block on the pipe splicing (but */
 19                                  /* we may still block on the fd we splice */
 20                                  /* from/to, of course */
 21 #define SPLICE_F_MORE   (0x04)  /* expect more data */
 22 #define SPLICE_F_GIFT   (0x08)  /* pages passed in are a gift */
 23 
 24 #define SPLICE_F_ALL (SPLICE_F_MOVE|SPLICE_F_NONBLOCK|SPLICE_F_MORE|SPLICE_F_GIFT)
 25 
 26 /*
 27  * Passed to the actors
 28  */
 29 struct splice_desc {
 30         size_t total_len;               /* remaining length */
 31         unsigned int len;               /* current length */
 32         unsigned int flags;             /* splice flags */
 33         /*
 34          * actor() private data
 35          */
 36         union {
 37                 void __user *userptr;   /* memory to write to */
 38                 struct file *file;      /* file to read/write */
 39                 void *data;             /* cookie */
 40         } u;
 41         void (*splice_eof)(struct splice_desc *sd); /* Unexpected EOF handler */
 42         loff_t pos;                     /* file position */
 43         loff_t *opos;                   /* sendfile: output position */
 44         size_t num_spliced;             /* number of bytes already spliced */
 45         bool need_wakeup;               /* need to wake up writer */
 46 };
 47 
 48 struct partial_page {
 49         unsigned int offset;
 50         unsigned int len;
 51         unsigned long private;
 52 };
 53 
 54 /*
 55  * Passed to splice_to_pipe
 56  */
 57 struct splice_pipe_desc {
 58         struct page **pages;            /* page map */
 59         struct partial_page *partial;   /* pages[] may not be contig */
 60         int nr_pages;                   /* number of populated pages in map */
 61         unsigned int nr_pages_max;      /* pages[] & partial[] arrays size */
 62         const struct pipe_buf_operations *ops;/* ops associated with output pipe */
 63         void (*spd_release)(struct splice_pipe_desc *, unsigned int);
 64 };
 65 
 66 typedef int (splice_actor)(struct pipe_inode_info *, struct pipe_buffer *,
 67                            struct splice_desc *);
 68 typedef int (splice_direct_actor)(struct pipe_inode_info *,
 69                                   struct splice_desc *);
 70 
 71 ssize_t splice_from_pipe(struct pipe_inode_info *pipe, struct file *out,
 72                          loff_t *ppos, size_t len, unsigned int flags,
 73                          splice_actor *actor);
 74 ssize_t __splice_from_pipe(struct pipe_inode_info *pipe,
 75                            struct splice_desc *sd, splice_actor *actor);
 76 ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
 77                               struct splice_pipe_desc *spd);
 78 ssize_t add_to_pipe(struct pipe_inode_info *pipe, struct pipe_buffer *buf);
 79 ssize_t vfs_splice_read(struct file *in, loff_t *ppos,
 80                         struct pipe_inode_info *pipe, size_t len,
 81                         unsigned int flags);
 82 ssize_t splice_direct_to_actor(struct file *file, struct splice_desc *sd,
 83                                splice_direct_actor *actor);
 84 ssize_t do_splice(struct file *in, loff_t *off_in, struct file *out,
 85                   loff_t *off_out, size_t len, unsigned int flags);
 86 ssize_t do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
 87                          loff_t *opos, size_t len, unsigned int flags);
 88 ssize_t splice_file_range(struct file *in, loff_t *ppos, struct file *out,
 89                           loff_t *opos, size_t len);
 90 
 91 static inline long splice_copy_file_range(struct file *in, loff_t pos_in,
 92                                           struct file *out, loff_t pos_out,
 93                                           size_t len)
 94 {
 95         return splice_file_range(in, &pos_in, out, &pos_out, len);
 96 }
 97 
 98 ssize_t do_tee(struct file *in, struct file *out, size_t len,
 99                unsigned int flags);
100 ssize_t splice_to_socket(struct pipe_inode_info *pipe, struct file *out,
101                          loff_t *ppos, size_t len, unsigned int flags);
102 
103 /*
104  * for dynamic pipe sizing
105  */
106 extern int splice_grow_spd(const struct pipe_inode_info *, struct splice_pipe_desc *);
107 extern void splice_shrink_spd(struct splice_pipe_desc *);
108 
109 extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
110 extern const struct pipe_buf_operations default_pipe_buf_ops;
111 #endif
112 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php