aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/fs.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/fs.h')
-rw-r--r--include/linux/fs.h89
1 files changed, 66 insertions, 23 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h
index b4d71b5e1ff2..c7496f263860 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -314,6 +314,33 @@ struct page;
314struct address_space; 314struct address_space;
315struct writeback_control; 315struct writeback_control;
316 316
317#define IOCB_EVENTFD (1 << 0)
318#define IOCB_APPEND (1 << 1)
319#define IOCB_DIRECT (1 << 2)
320
321struct kiocb {
322 struct file *ki_filp;
323 loff_t ki_pos;
324 void (*ki_complete)(struct kiocb *iocb, long ret, long ret2);
325 void *private;
326 int ki_flags;
327};
328
329static inline bool is_sync_kiocb(struct kiocb *kiocb)
330{
331 return kiocb->ki_complete == NULL;
332}
333
334static inline int iocb_flags(struct file *file);
335
336static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp)
337{
338 *kiocb = (struct kiocb) {
339 .ki_filp = filp,
340 .ki_flags = iocb_flags(filp),
341 };
342}
343
317/* 344/*
318 * "descriptor" for what we're up to with a read. 345 * "descriptor" for what we're up to with a read.
319 * This allows us to use the same read code yet 346 * This allows us to use the same read code yet
@@ -361,7 +388,7 @@ struct address_space_operations {
361 void (*invalidatepage) (struct page *, unsigned int, unsigned int); 388 void (*invalidatepage) (struct page *, unsigned int, unsigned int);
362 int (*releasepage) (struct page *, gfp_t); 389 int (*releasepage) (struct page *, gfp_t);
363 void (*freepage)(struct page *); 390 void (*freepage)(struct page *);
364 ssize_t (*direct_IO)(int, struct kiocb *, struct iov_iter *iter, loff_t offset); 391 ssize_t (*direct_IO)(struct kiocb *, struct iov_iter *iter, loff_t offset);
365 /* 392 /*
366 * migrate the contents of a page to the specified target. If 393 * migrate the contents of a page to the specified target. If
367 * migrate_mode is MIGRATE_ASYNC, it must not block. 394 * migrate_mode is MIGRATE_ASYNC, it must not block.
@@ -604,6 +631,7 @@ struct inode {
604 struct mutex i_mutex; 631 struct mutex i_mutex;
605 632
606 unsigned long dirtied_when; /* jiffies of first dirtying */ 633 unsigned long dirtied_when; /* jiffies of first dirtying */
634 unsigned long dirtied_time_when;
607 635
608 struct hlist_node i_hash; 636 struct hlist_node i_hash;
609 struct list_head i_wb_list; /* backing dev IO list */ 637 struct list_head i_wb_list; /* backing dev IO list */
@@ -847,6 +875,7 @@ static inline struct file *get_file(struct file *f)
847 atomic_long_inc(&f->f_count); 875 atomic_long_inc(&f->f_count);
848 return f; 876 return f;
849} 877}
878#define get_file_rcu(x) atomic_long_inc_not_zero(&(x)->f_count)
850#define fput_atomic(x) atomic_long_add_unless(&(x)->f_count, -1, 1) 879#define fput_atomic(x) atomic_long_add_unless(&(x)->f_count, -1, 1)
851#define file_count(x) atomic_long_read(&(x)->f_count) 880#define file_count(x) atomic_long_read(&(x)->f_count)
852 881
@@ -892,8 +921,8 @@ struct file_lock_operations {
892struct lock_manager_operations { 921struct lock_manager_operations {
893 int (*lm_compare_owner)(struct file_lock *, struct file_lock *); 922 int (*lm_compare_owner)(struct file_lock *, struct file_lock *);
894 unsigned long (*lm_owner_key)(struct file_lock *); 923 unsigned long (*lm_owner_key)(struct file_lock *);
895 void (*lm_get_owner)(struct file_lock *, struct file_lock *); 924 fl_owner_t (*lm_get_owner)(fl_owner_t);
896 void (*lm_put_owner)(struct file_lock *); 925 void (*lm_put_owner)(fl_owner_t);
897 void (*lm_notify)(struct file_lock *); /* unblock callback */ 926 void (*lm_notify)(struct file_lock *); /* unblock callback */
898 int (*lm_grant)(struct file_lock *, int); 927 int (*lm_grant)(struct file_lock *, int);
899 bool (*lm_break)(struct file_lock *); 928 bool (*lm_break)(struct file_lock *);
@@ -1018,6 +1047,9 @@ extern void lease_get_mtime(struct inode *, struct timespec *time);
1018extern int generic_setlease(struct file *, long, struct file_lock **, void **priv); 1047extern int generic_setlease(struct file *, long, struct file_lock **, void **priv);
1019extern int vfs_setlease(struct file *, long, struct file_lock **, void **); 1048extern int vfs_setlease(struct file *, long, struct file_lock **, void **);
1020extern int lease_modify(struct file_lock *, int, struct list_head *); 1049extern int lease_modify(struct file_lock *, int, struct list_head *);
1050struct files_struct;
1051extern void show_fd_locks(struct seq_file *f,
1052 struct file *filp, struct files_struct *files);
1021#else /* !CONFIG_FILE_LOCKING */ 1053#else /* !CONFIG_FILE_LOCKING */
1022static inline int fcntl_getlk(struct file *file, unsigned int cmd, 1054static inline int fcntl_getlk(struct file *file, unsigned int cmd,
1023 struct flock __user *user) 1055 struct flock __user *user)
@@ -1154,6 +1186,10 @@ static inline int lease_modify(struct file_lock *fl, int arg,
1154{ 1186{
1155 return -EINVAL; 1187 return -EINVAL;
1156} 1188}
1189
1190struct files_struct;
1191static inline void show_fd_locks(struct seq_file *f,
1192 struct file *filp, struct files_struct *files) {}
1157#endif /* !CONFIG_FILE_LOCKING */ 1193#endif /* !CONFIG_FILE_LOCKING */
1158 1194
1159 1195
@@ -1539,8 +1575,6 @@ struct file_operations {
1539 loff_t (*llseek) (struct file *, loff_t, int); 1575 loff_t (*llseek) (struct file *, loff_t, int);
1540 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); 1576 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
1541 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); 1577 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
1542 ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
1543 ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
1544 ssize_t (*read_iter) (struct kiocb *, struct iov_iter *); 1578 ssize_t (*read_iter) (struct kiocb *, struct iov_iter *);
1545 ssize_t (*write_iter) (struct kiocb *, struct iov_iter *); 1579 ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
1546 int (*iterate) (struct file *, struct dir_context *); 1580 int (*iterate) (struct file *, struct dir_context *);
@@ -1548,7 +1582,7 @@ struct file_operations {
1548 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); 1582 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
1549 long (*compat_ioctl) (struct file *, unsigned int, unsigned long); 1583 long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
1550 int (*mmap) (struct file *, struct vm_area_struct *); 1584 int (*mmap) (struct file *, struct vm_area_struct *);
1551 void (*mremap)(struct file *, struct vm_area_struct *); 1585 int (*mremap)(struct file *, struct vm_area_struct *);
1552 int (*open) (struct inode *, struct file *); 1586 int (*open) (struct inode *, struct file *);
1553 int (*flush) (struct file *, fl_owner_t id); 1587 int (*flush) (struct file *, fl_owner_t id);
1554 int (*release) (struct inode *, struct file *); 1588 int (*release) (struct inode *, struct file *);
@@ -1616,6 +1650,7 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
1616 struct iovec **ret_pointer); 1650 struct iovec **ret_pointer);
1617 1651
1618extern ssize_t __vfs_read(struct file *, char __user *, size_t, loff_t *); 1652extern ssize_t __vfs_read(struct file *, char __user *, size_t, loff_t *);
1653extern ssize_t __vfs_write(struct file *, const char __user *, size_t, loff_t *);
1619extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *); 1654extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
1620extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *); 1655extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *);
1621extern ssize_t vfs_readv(struct file *, const struct iovec __user *, 1656extern ssize_t vfs_readv(struct file *, const struct iovec __user *,
@@ -2144,7 +2179,7 @@ struct filename {
2144 const __user char *uptr; /* original userland pointer */ 2179 const __user char *uptr; /* original userland pointer */
2145 struct audit_names *aname; 2180 struct audit_names *aname;
2146 int refcnt; 2181 int refcnt;
2147 bool separate; /* should "name" be freed? */ 2182 const char iname[];
2148}; 2183};
2149 2184
2150extern long vfs_truncate(struct path *, loff_t); 2185extern long vfs_truncate(struct path *, loff_t);
@@ -2544,16 +2579,12 @@ extern int sb_min_blocksize(struct super_block *, int);
2544 2579
2545extern int generic_file_mmap(struct file *, struct vm_area_struct *); 2580extern int generic_file_mmap(struct file *, struct vm_area_struct *);
2546extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *); 2581extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *);
2547int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isblk); 2582extern ssize_t generic_write_checks(struct kiocb *, struct iov_iter *);
2548extern ssize_t generic_file_read_iter(struct kiocb *, struct iov_iter *); 2583extern ssize_t generic_file_read_iter(struct kiocb *, struct iov_iter *);
2549extern ssize_t __generic_file_write_iter(struct kiocb *, struct iov_iter *); 2584extern ssize_t __generic_file_write_iter(struct kiocb *, struct iov_iter *);
2550extern ssize_t generic_file_write_iter(struct kiocb *, struct iov_iter *); 2585extern ssize_t generic_file_write_iter(struct kiocb *, struct iov_iter *);
2551extern ssize_t generic_file_direct_write(struct kiocb *, struct iov_iter *, loff_t); 2586extern ssize_t generic_file_direct_write(struct kiocb *, struct iov_iter *, loff_t);
2552extern ssize_t generic_perform_write(struct file *, struct iov_iter *, loff_t); 2587extern ssize_t generic_perform_write(struct file *, struct iov_iter *, loff_t);
2553extern ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos);
2554extern ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos);
2555extern ssize_t new_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos);
2556extern ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos);
2557 2588
2558ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos); 2589ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos);
2559ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos); 2590ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos);
@@ -2591,12 +2622,13 @@ extern loff_t fixed_size_llseek(struct file *file, loff_t offset,
2591extern int generic_file_open(struct inode * inode, struct file * filp); 2622extern int generic_file_open(struct inode * inode, struct file * filp);
2592extern int nonseekable_open(struct inode * inode, struct file * filp); 2623extern int nonseekable_open(struct inode * inode, struct file * filp);
2593 2624
2594ssize_t dax_do_io(int rw, struct kiocb *, struct inode *, struct iov_iter *, 2625ssize_t dax_do_io(struct kiocb *, struct inode *, struct iov_iter *, loff_t,
2595 loff_t, get_block_t, dio_iodone_t, int flags); 2626 get_block_t, dio_iodone_t, int flags);
2596int dax_clear_blocks(struct inode *, sector_t block, long size); 2627int dax_clear_blocks(struct inode *, sector_t block, long size);
2597int dax_zero_page_range(struct inode *, loff_t from, unsigned len, get_block_t); 2628int dax_zero_page_range(struct inode *, loff_t from, unsigned len, get_block_t);
2598int dax_truncate_page(struct inode *, loff_t from, get_block_t); 2629int dax_truncate_page(struct inode *, loff_t from, get_block_t);
2599int dax_fault(struct vm_area_struct *, struct vm_fault *, get_block_t); 2630int dax_fault(struct vm_area_struct *, struct vm_fault *, get_block_t);
2631int dax_pfn_mkwrite(struct vm_area_struct *, struct vm_fault *);
2600#define dax_mkwrite(vma, vmf, gb) dax_fault(vma, vmf, gb) 2632#define dax_mkwrite(vma, vmf, gb) dax_fault(vma, vmf, gb)
2601 2633
2602#ifdef CONFIG_BLOCK 2634#ifdef CONFIG_BLOCK
@@ -2616,16 +2648,18 @@ enum {
2616 2648
2617void dio_end_io(struct bio *bio, int error); 2649void dio_end_io(struct bio *bio, int error);
2618 2650
2619ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, 2651ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
2620 struct block_device *bdev, struct iov_iter *iter, loff_t offset, 2652 struct block_device *bdev, struct iov_iter *iter,
2621 get_block_t get_block, dio_iodone_t end_io, 2653 loff_t offset, get_block_t get_block,
2622 dio_submit_t submit_io, int flags); 2654 dio_iodone_t end_io, dio_submit_t submit_io,
2655 int flags);
2623 2656
2624static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, 2657static inline ssize_t blockdev_direct_IO(struct kiocb *iocb,
2625 struct inode *inode, struct iov_iter *iter, loff_t offset, 2658 struct inode *inode,
2626 get_block_t get_block) 2659 struct iov_iter *iter, loff_t offset,
2660 get_block_t get_block)
2627{ 2661{
2628 return __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iter, 2662 return __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev, iter,
2629 offset, get_block, NULL, NULL, 2663 offset, get_block, NULL, NULL,
2630 DIO_LOCKING | DIO_SKIP_HOLES); 2664 DIO_LOCKING | DIO_SKIP_HOLES);
2631} 2665}
@@ -2661,7 +2695,6 @@ void inode_sub_bytes(struct inode *inode, loff_t bytes);
2661loff_t inode_get_bytes(struct inode *inode); 2695loff_t inode_get_bytes(struct inode *inode);
2662void inode_set_bytes(struct inode *inode, loff_t bytes); 2696void inode_set_bytes(struct inode *inode, loff_t bytes);
2663 2697
2664extern int vfs_readdir(struct file *, filldir_t, void *);
2665extern int iterate_dir(struct file *, struct dir_context *); 2698extern int iterate_dir(struct file *, struct dir_context *);
2666 2699
2667extern int vfs_stat(const char __user *, struct kstat *); 2700extern int vfs_stat(const char __user *, struct kstat *);
@@ -2759,6 +2792,16 @@ static inline bool io_is_direct(struct file *filp)
2759 return (filp->f_flags & O_DIRECT) || IS_DAX(file_inode(filp)); 2792 return (filp->f_flags & O_DIRECT) || IS_DAX(file_inode(filp));
2760} 2793}
2761 2794
2795static inline int iocb_flags(struct file *file)
2796{
2797 int res = 0;
2798 if (file->f_flags & O_APPEND)
2799 res |= IOCB_APPEND;
2800 if (io_is_direct(file))
2801 res |= IOCB_DIRECT;
2802 return res;
2803}
2804
2762static inline ino_t parent_ino(struct dentry *dentry) 2805static inline ino_t parent_ino(struct dentry *dentry)
2763{ 2806{
2764 ino_t res; 2807 ino_t res;