diff options
Diffstat (limited to 'include/linux/fs.h')
-rw-r--r-- | include/linux/fs.h | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 86ce27c72554..e9344e6f877d 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -394,6 +394,8 @@ enum positive_aop_returns { | |||
394 | AOP_TRUNCATED_PAGE = 0x80001, | 394 | AOP_TRUNCATED_PAGE = 0x80001, |
395 | }; | 395 | }; |
396 | 396 | ||
397 | #define AOP_FLAG_UNINTERRUPTIBLE 0x0001 /* will not do a short write */ | ||
398 | |||
397 | /* | 399 | /* |
398 | * oh the beauties of C type declarations. | 400 | * oh the beauties of C type declarations. |
399 | */ | 401 | */ |
@@ -413,7 +415,7 @@ size_t iov_iter_copy_from_user_atomic(struct page *page, | |||
413 | size_t iov_iter_copy_from_user(struct page *page, | 415 | size_t iov_iter_copy_from_user(struct page *page, |
414 | struct iov_iter *i, unsigned long offset, size_t bytes); | 416 | struct iov_iter *i, unsigned long offset, size_t bytes); |
415 | void iov_iter_advance(struct iov_iter *i, size_t bytes); | 417 | void iov_iter_advance(struct iov_iter *i, size_t bytes); |
416 | int iov_iter_fault_in_readable(struct iov_iter *i); | 418 | int iov_iter_fault_in_readable(struct iov_iter *i, size_t bytes); |
417 | size_t iov_iter_single_seg_count(struct iov_iter *i); | 419 | size_t iov_iter_single_seg_count(struct iov_iter *i); |
418 | 420 | ||
419 | static inline void iov_iter_init(struct iov_iter *i, | 421 | static inline void iov_iter_init(struct iov_iter *i, |
@@ -454,6 +456,14 @@ struct address_space_operations { | |||
454 | */ | 456 | */ |
455 | int (*prepare_write)(struct file *, struct page *, unsigned, unsigned); | 457 | int (*prepare_write)(struct file *, struct page *, unsigned, unsigned); |
456 | int (*commit_write)(struct file *, struct page *, unsigned, unsigned); | 458 | int (*commit_write)(struct file *, struct page *, unsigned, unsigned); |
459 | |||
460 | int (*write_begin)(struct file *, struct address_space *mapping, | ||
461 | loff_t pos, unsigned len, unsigned flags, | ||
462 | struct page **pagep, void **fsdata); | ||
463 | int (*write_end)(struct file *, struct address_space *mapping, | ||
464 | loff_t pos, unsigned len, unsigned copied, | ||
465 | struct page *page, void *fsdata); | ||
466 | |||
457 | /* Unfortunately this kludge is needed for FIBMAP. Don't use it */ | 467 | /* Unfortunately this kludge is needed for FIBMAP. Don't use it */ |
458 | sector_t (*bmap)(struct address_space *, sector_t); | 468 | sector_t (*bmap)(struct address_space *, sector_t); |
459 | void (*invalidatepage) (struct page *, unsigned long); | 469 | void (*invalidatepage) (struct page *, unsigned long); |
@@ -468,6 +478,18 @@ struct address_space_operations { | |||
468 | int (*launder_page) (struct page *); | 478 | int (*launder_page) (struct page *); |
469 | }; | 479 | }; |
470 | 480 | ||
481 | /* | ||
482 | * pagecache_write_begin/pagecache_write_end must be used by general code | ||
483 | * to write into the pagecache. | ||
484 | */ | ||
485 | int pagecache_write_begin(struct file *, struct address_space *mapping, | ||
486 | loff_t pos, unsigned len, unsigned flags, | ||
487 | struct page **pagep, void **fsdata); | ||
488 | |||
489 | int pagecache_write_end(struct file *, struct address_space *mapping, | ||
490 | loff_t pos, unsigned len, unsigned copied, | ||
491 | struct page *page, void *fsdata); | ||
492 | |||
471 | struct backing_dev_info; | 493 | struct backing_dev_info; |
472 | struct address_space { | 494 | struct address_space { |
473 | struct inode *host; /* owner: inode, block_device */ | 495 | struct inode *host; /* owner: inode, block_device */ |
@@ -1866,6 +1888,12 @@ extern int simple_prepare_write(struct file *file, struct page *page, | |||
1866 | unsigned offset, unsigned to); | 1888 | unsigned offset, unsigned to); |
1867 | extern int simple_commit_write(struct file *file, struct page *page, | 1889 | extern int simple_commit_write(struct file *file, struct page *page, |
1868 | unsigned offset, unsigned to); | 1890 | unsigned offset, unsigned to); |
1891 | extern int simple_write_begin(struct file *file, struct address_space *mapping, | ||
1892 | loff_t pos, unsigned len, unsigned flags, | ||
1893 | struct page **pagep, void **fsdata); | ||
1894 | extern int simple_write_end(struct file *file, struct address_space *mapping, | ||
1895 | loff_t pos, unsigned len, unsigned copied, | ||
1896 | struct page *page, void *fsdata); | ||
1869 | 1897 | ||
1870 | extern struct dentry *simple_lookup(struct inode *, struct dentry *, struct nameidata *); | 1898 | extern struct dentry *simple_lookup(struct inode *, struct dentry *, struct nameidata *); |
1871 | extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *); | 1899 | extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *); |