mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
fs: Convert aops->write_end to take a folio
Most callers have a folio, and most implementations operate on a folio, so remove the conversion from folio->page->folio to fit through this interface. Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
3e5d37c5f9
commit
a225800f32
@ -254,7 +254,7 @@ prototypes::
|
|||||||
struct page **pagep, void **fsdata);
|
struct page **pagep, void **fsdata);
|
||||||
int (*write_end)(struct file *, struct address_space *mapping,
|
int (*write_end)(struct file *, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata);
|
struct folio *folio, void *fsdata);
|
||||||
sector_t (*bmap)(struct address_space *, sector_t);
|
sector_t (*bmap)(struct address_space *, sector_t);
|
||||||
void (*invalidate_folio) (struct folio *, size_t start, size_t len);
|
void (*invalidate_folio) (struct folio *, size_t start, size_t len);
|
||||||
bool (*release_folio)(struct folio *, gfp_t);
|
bool (*release_folio)(struct folio *, gfp_t);
|
||||||
|
@ -810,7 +810,7 @@ cache in your filesystem. The following members are defined:
|
|||||||
struct page **pagep, void **fsdata);
|
struct page **pagep, void **fsdata);
|
||||||
int (*write_end)(struct file *, struct address_space *mapping,
|
int (*write_end)(struct file *, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata);
|
struct folio *folio, void *fsdata);
|
||||||
sector_t (*bmap)(struct address_space *, sector_t);
|
sector_t (*bmap)(struct address_space *, sector_t);
|
||||||
void (*invalidate_folio) (struct folio *, size_t start, size_t len);
|
void (*invalidate_folio) (struct folio *, size_t start, size_t len);
|
||||||
bool (*release_folio)(struct folio *, gfp_t);
|
bool (*release_folio)(struct folio *, gfp_t);
|
||||||
@ -944,8 +944,8 @@ cache in your filesystem. The following members are defined:
|
|||||||
called. len is the original len passed to write_begin, and
|
called. len is the original len passed to write_begin, and
|
||||||
copied is the amount that was able to be copied.
|
copied is the amount that was able to be copied.
|
||||||
|
|
||||||
The filesystem must take care of unlocking the page and
|
The filesystem must take care of unlocking the folio,
|
||||||
releasing it refcount, and updating i_size.
|
decrementing its refcount, and updating i_size.
|
||||||
|
|
||||||
Returns < 0 on failure, otherwise the number of bytes (<=
|
Returns < 0 on failure, otherwise the number of bytes (<=
|
||||||
'copied') that were able to be copied into pagecache.
|
'copied') that were able to be copied into pagecache.
|
||||||
|
@ -457,10 +457,9 @@ static int blkdev_write_begin(struct file *file, struct address_space *mapping,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int blkdev_write_end(struct file *file, struct address_space *mapping,
|
static int blkdev_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied, struct page *page,
|
loff_t pos, unsigned len, unsigned copied, struct folio *folio,
|
||||||
void *fsdata)
|
void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
int ret;
|
int ret;
|
||||||
ret = block_write_end(file, mapping, pos, len, copied, folio, fsdata);
|
ret = block_write_end(file, mapping, pos, len, copied, folio, fsdata);
|
||||||
|
|
||||||
|
@ -494,7 +494,7 @@ shmem_pwrite(struct drm_i915_gem_object *obj,
|
|||||||
kunmap_local(vaddr);
|
kunmap_local(vaddr);
|
||||||
|
|
||||||
err = aops->write_end(obj->base.filp, mapping, offset, len,
|
err = aops->write_end(obj->base.filp, mapping, offset, len,
|
||||||
len - unwritten, page, data);
|
len - unwritten, page_folio(page), data);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
@ -688,7 +688,7 @@ i915_gem_object_create_shmem_from_data(struct drm_i915_private *i915,
|
|||||||
kunmap(page);
|
kunmap(page);
|
||||||
|
|
||||||
err = aops->write_end(file, file->f_mapping, offset, len, len,
|
err = aops->write_end(file, file->f_mapping, offset, len, len,
|
||||||
page, pgdata);
|
page_folio(page), pgdata);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
@ -433,12 +433,12 @@ static int affs_write_begin(struct file *file, struct address_space *mapping,
|
|||||||
|
|
||||||
static int affs_write_end(struct file *file, struct address_space *mapping,
|
static int affs_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned int len, unsigned int copied,
|
loff_t pos, unsigned int len, unsigned int copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = generic_write_end(file, mapping, pos, len, copied, page, fsdata);
|
ret = generic_write_end(file, mapping, pos, len, copied, folio, fsdata);
|
||||||
|
|
||||||
/* Clear Archived bit on file writes, as AmigaOS would do */
|
/* Clear Archived bit on file writes, as AmigaOS would do */
|
||||||
if (AFFS_I(inode)->i_protect & FIBF_ARCHIVED) {
|
if (AFFS_I(inode)->i_protect & FIBF_ARCHIVED) {
|
||||||
@ -687,9 +687,8 @@ static int affs_write_begin_ofs(struct file *file, struct address_space *mapping
|
|||||||
|
|
||||||
static int affs_write_end_ofs(struct file *file, struct address_space *mapping,
|
static int affs_write_end_ofs(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
struct super_block *sb = inode->i_sb;
|
struct super_block *sb = inode->i_sb;
|
||||||
struct buffer_head *bh, *prev_bh;
|
struct buffer_head *bh, *prev_bh;
|
||||||
@ -889,7 +888,7 @@ affs_truncate(struct inode *inode)
|
|||||||
|
|
||||||
res = mapping->a_ops->write_begin(NULL, mapping, isize, 0, &page, &fsdata);
|
res = mapping->a_ops->write_begin(NULL, mapping, isize, 0, &page, &fsdata);
|
||||||
if (!res)
|
if (!res)
|
||||||
res = mapping->a_ops->write_end(NULL, mapping, isize, 0, 0, page, fsdata);
|
res = mapping->a_ops->write_end(NULL, mapping, isize, 0, 0, page_folio(page), fsdata);
|
||||||
else
|
else
|
||||||
inode->i_size = AFFS_I(inode)->mmu_private;
|
inode->i_size = AFFS_I(inode)->mmu_private;
|
||||||
mark_inode_dirty(inode);
|
mark_inode_dirty(inode);
|
||||||
|
@ -743,12 +743,11 @@ err_unlock:
|
|||||||
|
|
||||||
int bch2_write_end(struct file *file, struct address_space *mapping,
|
int bch2_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct bch_inode_info *inode = to_bch_ei(mapping->host);
|
struct bch_inode_info *inode = to_bch_ei(mapping->host);
|
||||||
struct bch_fs *c = inode->v.i_sb->s_fs_info;
|
struct bch_fs *c = inode->v.i_sb->s_fs_info;
|
||||||
struct bch2_folio_reservation *res = fsdata;
|
struct bch2_folio_reservation *res = fsdata;
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
unsigned offset = pos - folio_pos(folio);
|
unsigned offset = pos - folio_pos(folio);
|
||||||
|
|
||||||
lockdep_assert_held(&inode->v.i_rwsem);
|
lockdep_assert_held(&inode->v.i_rwsem);
|
||||||
|
@ -13,7 +13,7 @@ void bch2_readahead(struct readahead_control *);
|
|||||||
int bch2_write_begin(struct file *, struct address_space *, loff_t,
|
int bch2_write_begin(struct file *, struct address_space *, loff_t,
|
||||||
unsigned, struct page **, void **);
|
unsigned, struct page **, void **);
|
||||||
int bch2_write_end(struct file *, struct address_space *, loff_t,
|
int bch2_write_end(struct file *, struct address_space *, loff_t,
|
||||||
unsigned, unsigned, struct page *, void *);
|
unsigned len, unsigned copied, struct folio *, void *);
|
||||||
|
|
||||||
ssize_t bch2_write_iter(struct kiocb *, struct iov_iter *);
|
ssize_t bch2_write_iter(struct kiocb *, struct iov_iter *);
|
||||||
|
|
||||||
|
@ -2280,9 +2280,8 @@ EXPORT_SYMBOL(block_write_end);
|
|||||||
|
|
||||||
int generic_write_end(struct file *file, struct address_space *mapping,
|
int generic_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
loff_t old_size = inode->i_size;
|
loff_t old_size = inode->i_size;
|
||||||
bool i_size_changed = false;
|
bool i_size_changed = false;
|
||||||
@ -2480,7 +2479,7 @@ int generic_cont_expand_simple(struct inode *inode, loff_t size)
|
|||||||
if (err)
|
if (err)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
err = aops->write_end(NULL, mapping, size, 0, 0, page, fsdata);
|
err = aops->write_end(NULL, mapping, size, 0, 0, page_folio(page), fsdata);
|
||||||
BUG_ON(err > 0);
|
BUG_ON(err > 0);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
@ -2518,7 +2517,7 @@ static int cont_expand_zero(struct file *file, struct address_space *mapping,
|
|||||||
goto out;
|
goto out;
|
||||||
zero_user(page, zerofrom, len);
|
zero_user(page, zerofrom, len);
|
||||||
err = aops->write_end(file, mapping, curpos, len, len,
|
err = aops->write_end(file, mapping, curpos, len, len,
|
||||||
page, fsdata);
|
page_folio(page), fsdata);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto out;
|
goto out;
|
||||||
BUG_ON(err != len);
|
BUG_ON(err != len);
|
||||||
@ -2551,7 +2550,7 @@ static int cont_expand_zero(struct file *file, struct address_space *mapping,
|
|||||||
goto out;
|
goto out;
|
||||||
zero_user(page, zerofrom, len);
|
zero_user(page, zerofrom, len);
|
||||||
err = aops->write_end(file, mapping, curpos, len, len,
|
err = aops->write_end(file, mapping, curpos, len, len,
|
||||||
page, fsdata);
|
page_folio(page), fsdata);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto out;
|
goto out;
|
||||||
BUG_ON(err != len);
|
BUG_ON(err != len);
|
||||||
|
@ -1509,9 +1509,8 @@ static int ceph_write_begin(struct file *file, struct address_space *mapping,
|
|||||||
*/
|
*/
|
||||||
static int ceph_write_end(struct file *file, struct address_space *mapping,
|
static int ceph_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *subpage, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(subpage);
|
|
||||||
struct inode *inode = file_inode(file);
|
struct inode *inode = file_inode(file);
|
||||||
struct ceph_client *cl = ceph_inode_to_client(inode);
|
struct ceph_client *cl = ceph_inode_to_client(inode);
|
||||||
bool check_cap = false;
|
bool check_cap = false;
|
||||||
|
@ -458,15 +458,14 @@ int ecryptfs_write_inode_size_to_metadata(struct inode *ecryptfs_inode)
|
|||||||
* @pos: The file position
|
* @pos: The file position
|
||||||
* @len: The length of the data (unused)
|
* @len: The length of the data (unused)
|
||||||
* @copied: The amount of data copied
|
* @copied: The amount of data copied
|
||||||
* @page: The eCryptfs page
|
* @folio: The eCryptfs folio
|
||||||
* @fsdata: The fsdata (unused)
|
* @fsdata: The fsdata (unused)
|
||||||
*/
|
*/
|
||||||
static int ecryptfs_write_end(struct file *file,
|
static int ecryptfs_write_end(struct file *file,
|
||||||
struct address_space *mapping,
|
struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
pgoff_t index = pos >> PAGE_SHIFT;
|
pgoff_t index = pos >> PAGE_SHIFT;
|
||||||
unsigned from = pos & (PAGE_SIZE - 1);
|
unsigned from = pos & (PAGE_SIZE - 1);
|
||||||
unsigned to = from + copied;
|
unsigned to = from + copied;
|
||||||
|
@ -548,7 +548,7 @@ static int exfat_file_zeroed_range(struct file *file, loff_t start, loff_t end)
|
|||||||
|
|
||||||
zero_user_segment(page, zerofrom, zerofrom + len);
|
zero_user_segment(page, zerofrom, zerofrom + len);
|
||||||
|
|
||||||
err = ops->write_end(file, mapping, start, len, len, page, NULL);
|
err = ops->write_end(file, mapping, start, len, len, page_folio(page), NULL);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto out;
|
goto out;
|
||||||
start += len;
|
start += len;
|
||||||
|
@ -463,13 +463,13 @@ static int exfat_write_begin(struct file *file, struct address_space *mapping,
|
|||||||
|
|
||||||
static int exfat_write_end(struct file *file, struct address_space *mapping,
|
static int exfat_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned int len, unsigned int copied,
|
loff_t pos, unsigned int len, unsigned int copied,
|
||||||
struct page *pagep, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
struct exfat_inode_info *ei = EXFAT_I(inode);
|
struct exfat_inode_info *ei = EXFAT_I(inode);
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = generic_write_end(file, mapping, pos, len, copied, pagep, fsdata);
|
err = generic_write_end(file, mapping, pos, len, copied, folio, fsdata);
|
||||||
|
|
||||||
if (ei->i_size_aligned < i_size_read(inode)) {
|
if (ei->i_size_aligned < i_size_read(inode)) {
|
||||||
exfat_fs_error(inode->i_sb,
|
exfat_fs_error(inode->i_sb,
|
||||||
|
@ -928,11 +928,11 @@ ext2_write_begin(struct file *file, struct address_space *mapping,
|
|||||||
|
|
||||||
static int ext2_write_end(struct file *file, struct address_space *mapping,
|
static int ext2_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = generic_write_end(file, mapping, pos, len, copied, page, fsdata);
|
ret = generic_write_end(file, mapping, pos, len, copied, folio, fsdata);
|
||||||
if (ret < len)
|
if (ret < len)
|
||||||
ext2_write_failed(mapping, pos + len);
|
ext2_write_failed(mapping, pos + len);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1298,9 +1298,8 @@ static int write_end_fn(handle_t *handle, struct inode *inode,
|
|||||||
static int ext4_write_end(struct file *file,
|
static int ext4_write_end(struct file *file,
|
||||||
struct address_space *mapping,
|
struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
handle_t *handle = ext4_journal_current_handle();
|
handle_t *handle = ext4_journal_current_handle();
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
loff_t old_size = inode->i_size;
|
loff_t old_size = inode->i_size;
|
||||||
@ -1402,9 +1401,8 @@ static void ext4_journalled_zero_new_buffers(handle_t *handle,
|
|||||||
static int ext4_journalled_write_end(struct file *file,
|
static int ext4_journalled_write_end(struct file *file,
|
||||||
struct address_space *mapping,
|
struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
handle_t *handle = ext4_journal_current_handle();
|
handle_t *handle = ext4_journal_current_handle();
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
loff_t old_size = inode->i_size;
|
loff_t old_size = inode->i_size;
|
||||||
@ -3080,15 +3078,14 @@ static int ext4_da_do_write_end(struct address_space *mapping,
|
|||||||
static int ext4_da_write_end(struct file *file,
|
static int ext4_da_write_end(struct file *file,
|
||||||
struct address_space *mapping,
|
struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
int write_mode = (int)(unsigned long)fsdata;
|
int write_mode = (int)(unsigned long)fsdata;
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
|
|
||||||
if (write_mode == FALL_BACK_TO_NONDELALLOC)
|
if (write_mode == FALL_BACK_TO_NONDELALLOC)
|
||||||
return ext4_write_end(file, mapping, pos,
|
return ext4_write_end(file, mapping, pos,
|
||||||
len, copied, &folio->page, fsdata);
|
len, copied, folio, fsdata);
|
||||||
|
|
||||||
trace_ext4_da_write_end(inode, pos, len, copied);
|
trace_ext4_da_write_end(inode, pos, len, copied);
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ static int pagecache_write(struct inode *inode, const void *buf, size_t count,
|
|||||||
|
|
||||||
memcpy_to_page(page, offset_in_page(pos), buf, n);
|
memcpy_to_page(page, offset_in_page(pos), buf, n);
|
||||||
|
|
||||||
res = aops->write_end(NULL, mapping, pos, n, n, page, fsdata);
|
res = aops->write_end(NULL, mapping, pos, n, n, page_folio(page), fsdata);
|
||||||
if (res < 0)
|
if (res < 0)
|
||||||
return res;
|
return res;
|
||||||
if (res != n)
|
if (res != n)
|
||||||
|
@ -3689,9 +3689,8 @@ fail:
|
|||||||
static int f2fs_write_end(struct file *file,
|
static int f2fs_write_end(struct file *file,
|
||||||
struct address_space *mapping,
|
struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
struct inode *inode = folio->mapping->host;
|
struct inode *inode = folio->mapping->host;
|
||||||
|
|
||||||
trace_f2fs_write_end(inode, pos, len, copied);
|
trace_f2fs_write_end(inode, pos, len, copied);
|
||||||
|
@ -2700,7 +2700,7 @@ retry:
|
|||||||
memcpy_to_page(page, offset, data, tocopy);
|
memcpy_to_page(page, offset, data, tocopy);
|
||||||
|
|
||||||
a_ops->write_end(NULL, mapping, off, tocopy, tocopy,
|
a_ops->write_end(NULL, mapping, off, tocopy, tocopy,
|
||||||
page, fsdata);
|
page_folio(page), fsdata);
|
||||||
offset = 0;
|
offset = 0;
|
||||||
towrite -= tocopy;
|
towrite -= tocopy;
|
||||||
off += tocopy;
|
off += tocopy;
|
||||||
|
@ -90,7 +90,7 @@ static int pagecache_write(struct inode *inode, const void *buf, size_t count,
|
|||||||
|
|
||||||
memcpy_to_page(page, offset_in_page(pos), buf, n);
|
memcpy_to_page(page, offset_in_page(pos), buf, n);
|
||||||
|
|
||||||
res = aops->write_end(NULL, mapping, pos, n, n, page, fsdata);
|
res = aops->write_end(NULL, mapping, pos, n, n, page_folio(page), fsdata);
|
||||||
if (res < 0)
|
if (res < 0)
|
||||||
return res;
|
return res;
|
||||||
if (res != n)
|
if (res != n)
|
||||||
|
@ -236,11 +236,11 @@ static int fat_write_begin(struct file *file, struct address_space *mapping,
|
|||||||
|
|
||||||
static int fat_write_end(struct file *file, struct address_space *mapping,
|
static int fat_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *pagep, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
int err;
|
int err;
|
||||||
err = generic_write_end(file, mapping, pos, len, copied, pagep, fsdata);
|
err = generic_write_end(file, mapping, pos, len, copied, folio, fsdata);
|
||||||
if (err < len)
|
if (err < len)
|
||||||
fat_write_failed(mapping, pos + len);
|
fat_write_failed(mapping, pos + len);
|
||||||
if (!(err < 0) && !(MSDOS_I(inode)->i_attrs & ATTR_ARCH)) {
|
if (!(err < 0) && !(MSDOS_I(inode)->i_attrs & ATTR_ARCH)) {
|
||||||
|
@ -2433,9 +2433,8 @@ error:
|
|||||||
|
|
||||||
static int fuse_write_end(struct file *file, struct address_space *mapping,
|
static int fuse_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
struct inode *inode = folio->mapping->host;
|
struct inode *inode = folio->mapping->host;
|
||||||
|
|
||||||
/* Haven't copied anything? Skip zeroing, size extending, dirtying. */
|
/* Haven't copied anything? Skip zeroing, size extending, dirtying. */
|
||||||
|
@ -495,7 +495,7 @@ void hfs_file_truncate(struct inode *inode)
|
|||||||
&fsdata);
|
&fsdata);
|
||||||
if (!res) {
|
if (!res) {
|
||||||
res = generic_write_end(NULL, mapping, size + 1, 0, 0,
|
res = generic_write_end(NULL, mapping, size + 1, 0, 0,
|
||||||
page, fsdata);
|
page_folio(page), fsdata);
|
||||||
}
|
}
|
||||||
if (res)
|
if (res)
|
||||||
inode->i_size = HFS_I(inode)->phys_size;
|
inode->i_size = HFS_I(inode)->phys_size;
|
||||||
|
@ -563,7 +563,7 @@ void hfsplus_file_truncate(struct inode *inode)
|
|||||||
if (res)
|
if (res)
|
||||||
return;
|
return;
|
||||||
res = generic_write_end(NULL, mapping, size, 0, 0,
|
res = generic_write_end(NULL, mapping, size, 0, 0,
|
||||||
page, fsdata);
|
page_folio(page), fsdata);
|
||||||
if (res < 0)
|
if (res < 0)
|
||||||
return;
|
return;
|
||||||
mark_inode_dirty(inode);
|
mark_inode_dirty(inode);
|
||||||
|
@ -477,9 +477,8 @@ static int hostfs_write_begin(struct file *file, struct address_space *mapping,
|
|||||||
|
|
||||||
static int hostfs_write_end(struct file *file, struct address_space *mapping,
|
static int hostfs_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
void *buffer;
|
void *buffer;
|
||||||
size_t from = offset_in_folio(folio, pos);
|
size_t from = offset_in_folio(folio, pos);
|
||||||
|
@ -206,11 +206,11 @@ static int hpfs_write_begin(struct file *file, struct address_space *mapping,
|
|||||||
|
|
||||||
static int hpfs_write_end(struct file *file, struct address_space *mapping,
|
static int hpfs_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *pagep, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
int err;
|
int err;
|
||||||
err = generic_write_end(file, mapping, pos, len, copied, pagep, fsdata);
|
err = generic_write_end(file, mapping, pos, len, copied, folio, fsdata);
|
||||||
if (err < len)
|
if (err < len)
|
||||||
hpfs_write_failed(mapping, pos + len);
|
hpfs_write_failed(mapping, pos + len);
|
||||||
if (!(err < 0)) {
|
if (!(err < 0)) {
|
||||||
|
@ -395,7 +395,7 @@ static int hugetlbfs_write_begin(struct file *file,
|
|||||||
|
|
||||||
static int hugetlbfs_write_end(struct file *file, struct address_space *mapping,
|
static int hugetlbfs_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
BUG();
|
BUG();
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
static int jffs2_write_end(struct file *filp, struct address_space *mapping,
|
static int jffs2_write_end(struct file *filp, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *pg, void *fsdata);
|
struct folio *folio, void *fsdata);
|
||||||
static int jffs2_write_begin(struct file *filp, struct address_space *mapping,
|
static int jffs2_write_begin(struct file *filp, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len,
|
loff_t pos, unsigned len,
|
||||||
struct page **pagep, void **fsdata);
|
struct page **pagep, void **fsdata);
|
||||||
@ -239,9 +239,8 @@ out_err:
|
|||||||
|
|
||||||
static int jffs2_write_end(struct file *filp, struct address_space *mapping,
|
static int jffs2_write_end(struct file *filp, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *pg, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(pg);
|
|
||||||
/* Actually commit the write from the page cache page we're looking at.
|
/* Actually commit the write from the page cache page we're looking at.
|
||||||
* For now, we write the full page out each time. It sucks, but it's simple
|
* For now, we write the full page out each time. It sucks, but it's simple
|
||||||
*/
|
*/
|
||||||
|
@ -304,12 +304,12 @@ static int jfs_write_begin(struct file *file, struct address_space *mapping,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int jfs_write_end(struct file *file, struct address_space *mapping,
|
static int jfs_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied, struct page *page,
|
loff_t pos, unsigned len, unsigned copied, struct folio *folio,
|
||||||
void *fsdata)
|
void *fsdata)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = generic_write_end(file, mapping, pos, len, copied, page, fsdata);
|
ret = generic_write_end(file, mapping, pos, len, copied, folio, fsdata);
|
||||||
if (ret < len)
|
if (ret < len)
|
||||||
jfs_write_failed(mapping, pos + len);
|
jfs_write_failed(mapping, pos + len);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -929,11 +929,11 @@ EXPORT_SYMBOL(simple_write_begin);
|
|||||||
* @pos: "
|
* @pos: "
|
||||||
* @len: "
|
* @len: "
|
||||||
* @copied: "
|
* @copied: "
|
||||||
* @page: "
|
* @folio: "
|
||||||
* @fsdata: "
|
* @fsdata: "
|
||||||
*
|
*
|
||||||
* simple_write_end does the minimum needed for updating a page after writing is
|
* simple_write_end does the minimum needed for updating a folio after
|
||||||
* done. It has the same API signature as the .write_end of
|
* writing is done. It has the same API signature as the .write_end of
|
||||||
* address_space_operations vector. So it can just be set onto .write_end for
|
* address_space_operations vector. So it can just be set onto .write_end for
|
||||||
* FSes that don't need any other processing. i_mutex is assumed to be held.
|
* FSes that don't need any other processing. i_mutex is assumed to be held.
|
||||||
* Block based filesystems should use generic_write_end().
|
* Block based filesystems should use generic_write_end().
|
||||||
@ -946,9 +946,8 @@ EXPORT_SYMBOL(simple_write_begin);
|
|||||||
*/
|
*/
|
||||||
static int simple_write_end(struct file *file, struct address_space *mapping,
|
static int simple_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
struct inode *inode = folio->mapping->host;
|
struct inode *inode = folio->mapping->host;
|
||||||
loff_t last_pos = pos + copied;
|
loff_t last_pos = pos + copied;
|
||||||
|
|
||||||
|
@ -5321,7 +5321,7 @@ retry:
|
|||||||
memcpy(page_address(page), symname, len-1);
|
memcpy(page_address(page), symname, len-1);
|
||||||
|
|
||||||
err = aops->write_end(NULL, mapping, 0, len-1, len-1,
|
err = aops->write_end(NULL, mapping, 0, len-1, len-1,
|
||||||
page, fsdata);
|
page_folio(page), fsdata);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
if (err < len-1)
|
if (err < len-1)
|
||||||
|
@ -372,10 +372,9 @@ start:
|
|||||||
|
|
||||||
static int nfs_write_end(struct file *file, struct address_space *mapping,
|
static int nfs_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct nfs_open_context *ctx = nfs_file_open_context(file);
|
struct nfs_open_context *ctx = nfs_file_open_context(file);
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
unsigned offset = offset_in_folio(folio, pos);
|
unsigned offset = offset_in_folio(folio, pos);
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
@ -269,16 +269,16 @@ static int nilfs_write_begin(struct file *file, struct address_space *mapping,
|
|||||||
|
|
||||||
static int nilfs_write_end(struct file *file, struct address_space *mapping,
|
static int nilfs_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
unsigned int start = pos & (PAGE_SIZE - 1);
|
unsigned int start = pos & (PAGE_SIZE - 1);
|
||||||
unsigned int nr_dirty;
|
unsigned int nr_dirty;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
nr_dirty = nilfs_page_count_clean_buffers(page, start,
|
nr_dirty = nilfs_page_count_clean_buffers(&folio->page, start,
|
||||||
start + copied);
|
start + copied);
|
||||||
copied = generic_write_end(file, mapping, pos, len, copied, page,
|
copied = generic_write_end(file, mapping, pos, len, copied, folio,
|
||||||
fsdata);
|
fsdata);
|
||||||
nilfs_set_file_dirty(inode, nr_dirty);
|
nilfs_set_file_dirty(inode, nr_dirty);
|
||||||
err = nilfs_transaction_commit(inode->i_sb);
|
err = nilfs_transaction_commit(inode->i_sb);
|
||||||
|
@ -215,7 +215,7 @@ static int ntfs_extend_initialized_size(struct file *file,
|
|||||||
zero_user_segment(page, zerofrom, PAGE_SIZE);
|
zero_user_segment(page, zerofrom, PAGE_SIZE);
|
||||||
|
|
||||||
/* This function in any case puts page. */
|
/* This function in any case puts page. */
|
||||||
err = ntfs_write_end(file, mapping, pos, len, len, page, NULL);
|
err = ntfs_write_end(file, mapping, pos, len, len, page_folio(page), NULL);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto out;
|
goto out;
|
||||||
pos += len;
|
pos += len;
|
||||||
|
@ -947,9 +947,8 @@ out:
|
|||||||
* ntfs_write_end - Address_space_operations::write_end.
|
* ntfs_write_end - Address_space_operations::write_end.
|
||||||
*/
|
*/
|
||||||
int ntfs_write_end(struct file *file, struct address_space *mapping, loff_t pos,
|
int ntfs_write_end(struct file *file, struct address_space *mapping, loff_t pos,
|
||||||
u32 len, u32 copied, struct page *page, void *fsdata)
|
u32 len, u32 copied, struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
struct ntfs_inode *ni = ntfs_i(inode);
|
struct ntfs_inode *ni = ntfs_i(inode);
|
||||||
u64 valid = ni->i_valid;
|
u64 valid = ni->i_valid;
|
||||||
@ -979,7 +978,7 @@ int ntfs_write_end(struct file *file, struct address_space *mapping, loff_t pos,
|
|||||||
folio_unlock(folio);
|
folio_unlock(folio);
|
||||||
folio_put(folio);
|
folio_put(folio);
|
||||||
} else {
|
} else {
|
||||||
err = generic_write_end(file, mapping, pos, len, copied, page,
|
err = generic_write_end(file, mapping, pos, len, copied, folio,
|
||||||
fsdata);
|
fsdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -713,7 +713,7 @@ int ntfs_get_block(struct inode *inode, sector_t vbn,
|
|||||||
int ntfs_write_begin(struct file *file, struct address_space *mapping,
|
int ntfs_write_begin(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, u32 len, struct page **pagep, void **fsdata);
|
loff_t pos, u32 len, struct page **pagep, void **fsdata);
|
||||||
int ntfs_write_end(struct file *file, struct address_space *mapping, loff_t pos,
|
int ntfs_write_end(struct file *file, struct address_space *mapping, loff_t pos,
|
||||||
u32 len, u32 copied, struct page *page, void *fsdata);
|
u32 len, u32 copied, struct folio *folio, void *fsdata);
|
||||||
int ntfs3_write_inode(struct inode *inode, struct writeback_control *wbc);
|
int ntfs3_write_inode(struct inode *inode, struct writeback_control *wbc);
|
||||||
int ntfs_sync_inode(struct inode *inode);
|
int ntfs_sync_inode(struct inode *inode);
|
||||||
int ntfs_flush_inodes(struct super_block *sb, struct inode *i1,
|
int ntfs_flush_inodes(struct super_block *sb, struct inode *i1,
|
||||||
|
@ -2076,7 +2076,7 @@ out:
|
|||||||
|
|
||||||
static int ocfs2_write_end(struct file *file, struct address_space *mapping,
|
static int ocfs2_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
|
@ -361,9 +361,9 @@ okay:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int orangefs_write_end(struct file *file, struct address_space *mapping,
|
static int orangefs_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied, struct page *page, void *fsdata)
|
loff_t pos, unsigned len, unsigned copied, struct folio *folio,
|
||||||
|
void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
struct inode *inode = folio->mapping->host;
|
struct inode *inode = folio->mapping->host;
|
||||||
loff_t last_pos = pos + copied;
|
loff_t last_pos = pos + copied;
|
||||||
|
|
||||||
|
@ -2862,10 +2862,9 @@ static sector_t reiserfs_aop_bmap(struct address_space *as, sector_t block)
|
|||||||
|
|
||||||
static int reiserfs_write_end(struct file *file, struct address_space *mapping,
|
static int reiserfs_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
struct inode *inode = folio->mapping->host;
|
||||||
struct inode *inode = page->mapping->host;
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int update_sd = 0;
|
int update_sd = 0;
|
||||||
struct reiserfs_transaction_handle *th;
|
struct reiserfs_transaction_handle *th;
|
||||||
@ -2887,7 +2886,7 @@ static int reiserfs_write_end(struct file *file, struct address_space *mapping,
|
|||||||
}
|
}
|
||||||
flush_dcache_folio(folio);
|
flush_dcache_folio(folio);
|
||||||
|
|
||||||
reiserfs_commit_page(inode, page, start, start + copied);
|
reiserfs_commit_page(inode, &folio->page, start, start + copied);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* generic_commit_write does this for us, but does not update the
|
* generic_commit_write does this for us, but does not update the
|
||||||
@ -2942,8 +2941,8 @@ static int reiserfs_write_end(struct file *file, struct address_space *mapping,
|
|||||||
out:
|
out:
|
||||||
if (locked)
|
if (locked)
|
||||||
reiserfs_write_unlock(inode->i_sb);
|
reiserfs_write_unlock(inode->i_sb);
|
||||||
unlock_page(page);
|
folio_unlock(folio);
|
||||||
put_page(page);
|
folio_put(folio);
|
||||||
|
|
||||||
if (pos + len > inode->i_size)
|
if (pos + len > inode->i_size)
|
||||||
reiserfs_truncate_failed_write(inode);
|
reiserfs_truncate_failed_write(inode);
|
||||||
|
@ -524,9 +524,8 @@ static void cancel_budget(struct ubifs_info *c, struct folio *folio,
|
|||||||
|
|
||||||
static int ubifs_write_end(struct file *file, struct address_space *mapping,
|
static int ubifs_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
struct ubifs_inode *ui = ubifs_inode(inode);
|
struct ubifs_inode *ui = ubifs_inode(inode);
|
||||||
struct ubifs_info *c = inode->i_sb->s_fs_info;
|
struct ubifs_info *c = inode->i_sb->s_fs_info;
|
||||||
|
@ -273,16 +273,14 @@ static int udf_write_begin(struct file *file, struct address_space *mapping,
|
|||||||
|
|
||||||
static int udf_write_end(struct file *file, struct address_space *mapping,
|
static int udf_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct inode *inode = file_inode(file);
|
struct inode *inode = file_inode(file);
|
||||||
struct folio *folio;
|
|
||||||
loff_t last_pos;
|
loff_t last_pos;
|
||||||
|
|
||||||
if (UDF_I(inode)->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB)
|
if (UDF_I(inode)->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB)
|
||||||
return generic_write_end(file, mapping, pos, len, copied, page,
|
return generic_write_end(file, mapping, pos, len, copied, folio,
|
||||||
fsdata);
|
fsdata);
|
||||||
folio = page_folio(page);
|
|
||||||
last_pos = pos + copied;
|
last_pos = pos + copied;
|
||||||
if (last_pos > inode->i_size)
|
if (last_pos > inode->i_size)
|
||||||
i_size_write(inode, last_pos);
|
i_size_write(inode, last_pos);
|
||||||
|
@ -511,11 +511,11 @@ static int ufs_write_begin(struct file *file, struct address_space *mapping,
|
|||||||
|
|
||||||
static int ufs_write_end(struct file *file, struct address_space *mapping,
|
static int ufs_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = generic_write_end(file, mapping, pos, len, copied, page, fsdata);
|
ret = generic_write_end(file, mapping, pos, len, copied, folio, fsdata);
|
||||||
if (ret < len)
|
if (ret < len)
|
||||||
ufs_write_failed(mapping, pos + len);
|
ufs_write_failed(mapping, pos + len);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -300,9 +300,8 @@ static int vboxsf_writepage(struct page *page, struct writeback_control *wbc)
|
|||||||
|
|
||||||
static int vboxsf_write_end(struct file *file, struct address_space *mapping,
|
static int vboxsf_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned int len, unsigned int copied,
|
loff_t pos, unsigned int len, unsigned int copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
struct vboxsf_handle *sf_handle = file->private_data;
|
struct vboxsf_handle *sf_handle = file->private_data;
|
||||||
size_t from = offset_in_folio(folio, pos);
|
size_t from = offset_in_folio(folio, pos);
|
||||||
@ -314,10 +313,10 @@ static int vboxsf_write_end(struct file *file, struct address_space *mapping,
|
|||||||
if (!folio_test_uptodate(folio) && copied < len)
|
if (!folio_test_uptodate(folio) && copied < len)
|
||||||
folio_zero_range(folio, from + copied, len - copied);
|
folio_zero_range(folio, from + copied, len - copied);
|
||||||
|
|
||||||
buf = kmap(page);
|
buf = kmap(&folio->page);
|
||||||
err = vboxsf_write(sf_handle->root, sf_handle->handle,
|
err = vboxsf_write(sf_handle->root, sf_handle->handle,
|
||||||
pos, &nwritten, buf + from);
|
pos, &nwritten, buf + from);
|
||||||
kunmap(page);
|
kunmap(&folio->page);
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
nwritten = 0;
|
nwritten = 0;
|
||||||
|
@ -265,8 +265,8 @@ int block_write_end(struct file *, struct address_space *,
|
|||||||
loff_t, unsigned len, unsigned copied,
|
loff_t, unsigned len, unsigned copied,
|
||||||
struct folio *, void *);
|
struct folio *, void *);
|
||||||
int generic_write_end(struct file *, struct address_space *,
|
int generic_write_end(struct file *, struct address_space *,
|
||||||
loff_t, unsigned, unsigned,
|
loff_t, unsigned len, unsigned copied,
|
||||||
struct page *, void *);
|
struct folio *, void *);
|
||||||
void folio_zero_new_buffers(struct folio *folio, size_t from, size_t to);
|
void folio_zero_new_buffers(struct folio *folio, size_t from, size_t to);
|
||||||
int cont_write_begin(struct file *, struct address_space *, loff_t,
|
int cont_write_begin(struct file *, struct address_space *, loff_t,
|
||||||
unsigned, struct page **, void **,
|
unsigned, struct page **, void **,
|
||||||
|
@ -411,7 +411,7 @@ struct address_space_operations {
|
|||||||
struct page **pagep, void **fsdata);
|
struct page **pagep, void **fsdata);
|
||||||
int (*write_end)(struct file *, struct address_space *mapping,
|
int (*write_end)(struct file *, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata);
|
struct folio *folio, void *fsdata);
|
||||||
|
|
||||||
/* Unfortunately this kludge is needed for FIBMAP. Don't use it */
|
/* Unfortunately this kludge is needed for FIBMAP. Don't use it */
|
||||||
sector_t (*bmap)(struct address_space *, sector_t);
|
sector_t (*bmap)(struct address_space *, sector_t);
|
||||||
|
@ -4033,7 +4033,7 @@ retry:
|
|||||||
flush_dcache_folio(folio);
|
flush_dcache_folio(folio);
|
||||||
|
|
||||||
status = a_ops->write_end(file, mapping, pos, bytes, copied,
|
status = a_ops->write_end(file, mapping, pos, bytes, copied,
|
||||||
page, fsdata);
|
folio, fsdata);
|
||||||
if (unlikely(status != copied)) {
|
if (unlikely(status != copied)) {
|
||||||
iov_iter_revert(i, copied - max(status, 0L));
|
iov_iter_revert(i, copied - max(status, 0L));
|
||||||
if (unlikely(status < 0))
|
if (unlikely(status < 0))
|
||||||
|
@ -2917,9 +2917,8 @@ shmem_write_begin(struct file *file, struct address_space *mapping,
|
|||||||
static int
|
static int
|
||||||
shmem_write_end(struct file *file, struct address_space *mapping,
|
shmem_write_end(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned copied,
|
loff_t pos, unsigned len, unsigned copied,
|
||||||
struct page *page, void *fsdata)
|
struct folio *folio, void *fsdata)
|
||||||
{
|
{
|
||||||
struct folio *folio = page_folio(page);
|
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
|
|
||||||
if (pos + copied > inode->i_size)
|
if (pos + copied > inode->i_size)
|
||||||
|
Loading…
Reference in New Issue
Block a user