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

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

Version: ~ [ linux-5.3-rc1 ] ~ [ linux-5.2.2 ] ~ [ linux-5.1.19 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.60 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.134 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.186 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.186 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.70 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ 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         loff_t pos;                     /* file position */
 42         loff_t *opos;                   /* sendfile: output position */
 43         size_t num_spliced;             /* number of bytes already spliced */
 44         bool need_wakeup;               /* need to wake up writer */
 45 };
 46 
 47 struct partial_page {
 48         unsigned int offset;
 49         unsigned int len;
 50         unsigned long private;
 51 };
 52 
 53 /*
 54  * Passed to splice_to_pipe
 55  */
 56 struct splice_pipe_desc {
 57         struct page **pages;            /* page map */
 58         struct partial_page *partial;   /* pages[] may not be contig */
 59         int nr_pages;                   /* number of populated pages in map */
 60         unsigned int nr_pages_max;      /* pages[] & partial[] arrays size */
 61         const struct pipe_buf_operations *ops;/* ops associated with output pipe */
 62         void (*spd_release)(struct splice_pipe_desc *, unsigned int);
 63 };
 64 
 65 typedef int (splice_actor)(struct pipe_inode_info *, struct pipe_buffer *,
 66                            struct splice_desc *);
 67 typedef int (splice_direct_actor)(struct pipe_inode_info *,
 68                                   struct splice_desc *);
 69 
 70 extern ssize_t splice_from_pipe(struct pipe_inode_info *, struct file *,
 71                                 loff_t *, size_t, unsigned int,
 72                                 splice_actor *);
 73 extern ssize_t __splice_from_pipe(struct pipe_inode_info *,
 74                                   struct splice_desc *, splice_actor *);
 75 extern ssize_t splice_to_pipe(struct pipe_inode_info *,
 76                               struct splice_pipe_desc *);
 77 extern ssize_t add_to_pipe(struct pipe_inode_info *,
 78                               struct pipe_buffer *);
 79 extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *,
 80                                       splice_direct_actor *);
 81 
 82 /*
 83  * for dynamic pipe sizing
 84  */
 85 extern int splice_grow_spd(const struct pipe_inode_info *, struct splice_pipe_desc *);
 86 extern void splice_shrink_spd(struct splice_pipe_desc *);
 87 
 88 extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
 89 extern const struct pipe_buf_operations default_pipe_buf_ops;
 90 #endif
 91 

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

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | 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.

osdn.jp