Loading fs/bfs/file.c +10 −5 Original line number Original line Diff line number Diff line Loading @@ -161,6 +161,14 @@ static int bfs_readpage(struct file *file, struct page *page) return block_read_full_page(page, bfs_get_block); return block_read_full_page(page, bfs_get_block); } } static void bfs_write_failed(struct address_space *mapping, loff_t to) { struct inode *inode = mapping->host; if (to > inode->i_size) truncate_pagecache(inode, to, inode->i_size); } static int bfs_write_begin(struct file *file, struct address_space *mapping, static int bfs_write_begin(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, unsigned flags, loff_t pos, unsigned len, unsigned flags, struct page **pagep, void **fsdata) struct page **pagep, void **fsdata) Loading @@ -169,11 +177,8 @@ static int bfs_write_begin(struct file *file, struct address_space *mapping, ret = block_write_begin(mapping, pos, len, flags, pagep, ret = block_write_begin(mapping, pos, len, flags, pagep, bfs_get_block); bfs_get_block); if (unlikely(ret)) { if (unlikely(ret)) loff_t isize = mapping->host->i_size; bfs_write_failed(mapping, pos + len); if (pos + len > isize) vmtruncate(mapping->host, isize); } return ret; return ret; } } Loading Loading
fs/bfs/file.c +10 −5 Original line number Original line Diff line number Diff line Loading @@ -161,6 +161,14 @@ static int bfs_readpage(struct file *file, struct page *page) return block_read_full_page(page, bfs_get_block); return block_read_full_page(page, bfs_get_block); } } static void bfs_write_failed(struct address_space *mapping, loff_t to) { struct inode *inode = mapping->host; if (to > inode->i_size) truncate_pagecache(inode, to, inode->i_size); } static int bfs_write_begin(struct file *file, struct address_space *mapping, static int bfs_write_begin(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, unsigned flags, loff_t pos, unsigned len, unsigned flags, struct page **pagep, void **fsdata) struct page **pagep, void **fsdata) Loading @@ -169,11 +177,8 @@ static int bfs_write_begin(struct file *file, struct address_space *mapping, ret = block_write_begin(mapping, pos, len, flags, pagep, ret = block_write_begin(mapping, pos, len, flags, pagep, bfs_get_block); bfs_get_block); if (unlikely(ret)) { if (unlikely(ret)) loff_t isize = mapping->host->i_size; bfs_write_failed(mapping, pos + len); if (pos + len > isize) vmtruncate(mapping->host, isize); } return ret; return ret; } } Loading