diff options
Diffstat (limited to 'include/linux/fs.h')
| -rw-r--r-- | include/linux/fs.h | 69 |
1 files changed, 61 insertions, 8 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 562d2855cf30..5bed436f4353 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -87,6 +87,60 @@ struct inodes_stat_t { | |||
| 87 | */ | 87 | */ |
| 88 | #define FMODE_NOCMTIME ((__force fmode_t)2048) | 88 | #define FMODE_NOCMTIME ((__force fmode_t)2048) |
| 89 | 89 | ||
| 90 | /* | ||
| 91 | * The below are the various read and write types that we support. Some of | ||
| 92 | * them include behavioral modifiers that send information down to the | ||
| 93 | * block layer and IO scheduler. Terminology: | ||
| 94 | * | ||
| 95 | * The block layer uses device plugging to defer IO a little bit, in | ||
| 96 | * the hope that we will see more IO very shortly. This increases | ||
| 97 | * coalescing of adjacent IO and thus reduces the number of IOs we | ||
| 98 | * have to send to the device. It also allows for better queuing, | ||
| 99 | * if the IO isn't mergeable. If the caller is going to be waiting | ||
| 100 | * for the IO, then he must ensure that the device is unplugged so | ||
| 101 | * that the IO is dispatched to the driver. | ||
| 102 | * | ||
| 103 | * All IO is handled async in Linux. This is fine for background | ||
| 104 | * writes, but for reads or writes that someone waits for completion | ||
| 105 | * on, we want to notify the block layer and IO scheduler so that they | ||
| 106 | * know about it. That allows them to make better scheduling | ||
| 107 | * decisions. So when the below references 'sync' and 'async', it | ||
| 108 | * is referencing this priority hint. | ||
| 109 | * | ||
| 110 | * With that in mind, the available types are: | ||
| 111 | * | ||
| 112 | * READ A normal read operation. Device will be plugged. | ||
| 113 | * READ_SYNC A synchronous read. Device is not plugged, caller can | ||
| 114 | * immediately wait on this read without caring about | ||
| 115 | * unplugging. | ||
| 116 | * READA Used for read-ahead operations. Lower priority, and the | ||
| 117 | * block layer could (in theory) choose to ignore this | ||
| 118 | * request if it runs into resource problems. | ||
| 119 | * WRITE A normal async write. Device will be plugged. | ||
| 120 | * SWRITE Like WRITE, but a special case for ll_rw_block() that | ||
| 121 | * tells it to lock the buffer first. Normally a buffer | ||
| 122 | * must be locked before doing IO. | ||
| 123 | * WRITE_SYNC_PLUG Synchronous write. Identical to WRITE, but passes down | ||
| 124 | * the hint that someone will be waiting on this IO | ||
| 125 | * shortly. The device must still be unplugged explicitly, | ||
| 126 | * WRITE_SYNC_PLUG does not do this as we could be | ||
| 127 | * submitting more writes before we actually wait on any | ||
| 128 | * of them. | ||
| 129 | * WRITE_SYNC Like WRITE_SYNC_PLUG, but also unplugs the device | ||
| 130 | * immediately after submission. The write equivalent | ||
| 131 | * of READ_SYNC. | ||
| 132 | * WRITE_ODIRECT Special case write for O_DIRECT only. | ||
| 133 | * SWRITE_SYNC | ||
| 134 | * SWRITE_SYNC_PLUG Like WRITE_SYNC/WRITE_SYNC_PLUG, but locks the buffer. | ||
| 135 | * See SWRITE. | ||
| 136 | * WRITE_BARRIER Like WRITE, but tells the block layer that all | ||
| 137 | * previously submitted writes must be safely on storage | ||
| 138 | * before this one is started. Also guarantees that when | ||
| 139 | * this write is complete, it itself is also safely on | ||
| 140 | * storage. Prevents reordering of writes on both sides | ||
| 141 | * of this IO. | ||
| 142 | * | ||
| 143 | */ | ||
| 90 | #define RW_MASK 1 | 144 | #define RW_MASK 1 |
| 91 | #define RWA_MASK 2 | 145 | #define RWA_MASK 2 |
| 92 | #define READ 0 | 146 | #define READ 0 |
| @@ -102,6 +156,11 @@ struct inodes_stat_t { | |||
| 102 | (SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE)) | 156 | (SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE)) |
| 103 | #define SWRITE_SYNC (SWRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG)) | 157 | #define SWRITE_SYNC (SWRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG)) |
| 104 | #define WRITE_BARRIER (WRITE | (1 << BIO_RW_BARRIER)) | 158 | #define WRITE_BARRIER (WRITE | (1 << BIO_RW_BARRIER)) |
| 159 | |||
| 160 | /* | ||
| 161 | * These aren't really reads or writes, they pass down information about | ||
| 162 | * parts of device that are now unused by the file system. | ||
| 163 | */ | ||
| 105 | #define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD) | 164 | #define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD) |
| 106 | #define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER)) | 165 | #define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER)) |
| 107 | 166 | ||
| @@ -738,9 +797,6 @@ enum inode_i_mutex_lock_class | |||
| 738 | I_MUTEX_QUOTA | 797 | I_MUTEX_QUOTA |
| 739 | }; | 798 | }; |
| 740 | 799 | ||
| 741 | extern void inode_double_lock(struct inode *inode1, struct inode *inode2); | ||
| 742 | extern void inode_double_unlock(struct inode *inode1, struct inode *inode2); | ||
| 743 | |||
| 744 | /* | 800 | /* |
| 745 | * NOTE: in a 32bit arch with a preemptable kernel and | 801 | * NOTE: in a 32bit arch with a preemptable kernel and |
| 746 | * an UP compile the i_size_read/write must be atomic | 802 | * an UP compile the i_size_read/write must be atomic |
| @@ -2150,8 +2206,6 @@ extern ssize_t generic_file_splice_read(struct file *, loff_t *, | |||
| 2150 | struct pipe_inode_info *, size_t, unsigned int); | 2206 | struct pipe_inode_info *, size_t, unsigned int); |
| 2151 | extern ssize_t generic_file_splice_write(struct pipe_inode_info *, | 2207 | extern ssize_t generic_file_splice_write(struct pipe_inode_info *, |
| 2152 | struct file *, loff_t *, size_t, unsigned int); | 2208 | struct file *, loff_t *, size_t, unsigned int); |
| 2153 | extern ssize_t generic_file_splice_write_nolock(struct pipe_inode_info *, | ||
| 2154 | struct file *, loff_t *, size_t, unsigned int); | ||
| 2155 | extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe, | 2209 | extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe, |
| 2156 | struct file *out, loff_t *, size_t len, unsigned int flags); | 2210 | struct file *out, loff_t *, size_t len, unsigned int flags); |
| 2157 | extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out, | 2211 | extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out, |
| @@ -2245,9 +2299,8 @@ extern int vfs_readdir(struct file *, filldir_t, void *); | |||
| 2245 | 2299 | ||
| 2246 | extern int vfs_stat(char __user *, struct kstat *); | 2300 | extern int vfs_stat(char __user *, struct kstat *); |
| 2247 | extern int vfs_lstat(char __user *, struct kstat *); | 2301 | extern int vfs_lstat(char __user *, struct kstat *); |
| 2248 | extern int vfs_stat_fd(int dfd, char __user *, struct kstat *); | ||
| 2249 | extern int vfs_lstat_fd(int dfd, char __user *, struct kstat *); | ||
| 2250 | extern int vfs_fstat(unsigned int, struct kstat *); | 2302 | extern int vfs_fstat(unsigned int, struct kstat *); |
| 2303 | extern int vfs_fstatat(int , char __user *, struct kstat *, int); | ||
| 2251 | 2304 | ||
| 2252 | extern int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd, | 2305 | extern int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd, |
| 2253 | unsigned long arg); | 2306 | unsigned long arg); |
| @@ -2395,7 +2448,7 @@ struct ctl_table; | |||
| 2395 | int proc_nr_files(struct ctl_table *table, int write, struct file *filp, | 2448 | int proc_nr_files(struct ctl_table *table, int write, struct file *filp, |
| 2396 | void __user *buffer, size_t *lenp, loff_t *ppos); | 2449 | void __user *buffer, size_t *lenp, loff_t *ppos); |
| 2397 | 2450 | ||
| 2398 | int get_filesystem_list(char * buf); | 2451 | int __init get_filesystem_list(char *buf); |
| 2399 | 2452 | ||
| 2400 | #endif /* __KERNEL__ */ | 2453 | #endif /* __KERNEL__ */ |
| 2401 | #endif /* _LINUX_FS_H */ | 2454 | #endif /* _LINUX_FS_H */ |
