Loading fs/fuse/file.c +13 −8 Original line number Diff line number Diff line Loading @@ -654,6 +654,15 @@ static void fuse_read_update_size(struct inode *inode, loff_t size, spin_unlock(&fc->lock); } static void fuse_short_read(struct fuse_req *req, struct inode *inode, u64 attr_ver) { size_t num_read = req->out.args[0].size; loff_t pos = page_offset(req->pages[0]) + num_read; fuse_read_update_size(inode, pos, attr_ver); } static int fuse_readpage(struct file *file, struct page *page) { struct fuse_io_priv io = { .async = 0, .file = file }; Loading Loading @@ -691,18 +700,18 @@ static int fuse_readpage(struct file *file, struct page *page) req->page_descs[0].length = count; num_read = fuse_send_read(req, &io, pos, count, NULL); err = req->out.h.error; fuse_put_request(fc, req); if (!err) { /* * Short read means EOF. If file size is larger, truncate it */ if (num_read < count) fuse_read_update_size(inode, pos + num_read, attr_ver); fuse_short_read(req, inode, attr_ver); SetPageUptodate(page); } fuse_put_request(fc, req); fuse_invalidate_atime(inode); out: unlock_page(page); Loading @@ -725,13 +734,9 @@ static void fuse_readpages_end(struct fuse_conn *fc, struct fuse_req *req) /* * Short read means EOF. If file size is larger, truncate it */ if (!req->out.h.error && num_read < count) { loff_t pos; if (!req->out.h.error && num_read < count) fuse_short_read(req, inode, req->misc.read.attr_ver); pos = page_offset(req->pages[0]) + num_read; fuse_read_update_size(inode, pos, req->misc.read.attr_ver); } fuse_invalidate_atime(inode); } Loading Loading
fs/fuse/file.c +13 −8 Original line number Diff line number Diff line Loading @@ -654,6 +654,15 @@ static void fuse_read_update_size(struct inode *inode, loff_t size, spin_unlock(&fc->lock); } static void fuse_short_read(struct fuse_req *req, struct inode *inode, u64 attr_ver) { size_t num_read = req->out.args[0].size; loff_t pos = page_offset(req->pages[0]) + num_read; fuse_read_update_size(inode, pos, attr_ver); } static int fuse_readpage(struct file *file, struct page *page) { struct fuse_io_priv io = { .async = 0, .file = file }; Loading Loading @@ -691,18 +700,18 @@ static int fuse_readpage(struct file *file, struct page *page) req->page_descs[0].length = count; num_read = fuse_send_read(req, &io, pos, count, NULL); err = req->out.h.error; fuse_put_request(fc, req); if (!err) { /* * Short read means EOF. If file size is larger, truncate it */ if (num_read < count) fuse_read_update_size(inode, pos + num_read, attr_ver); fuse_short_read(req, inode, attr_ver); SetPageUptodate(page); } fuse_put_request(fc, req); fuse_invalidate_atime(inode); out: unlock_page(page); Loading @@ -725,13 +734,9 @@ static void fuse_readpages_end(struct fuse_conn *fc, struct fuse_req *req) /* * Short read means EOF. If file size is larger, truncate it */ if (!req->out.h.error && num_read < count) { loff_t pos; if (!req->out.h.error && num_read < count) fuse_short_read(req, inode, req->misc.read.attr_ver); pos = page_offset(req->pages[0]) + num_read; fuse_read_update_size(inode, pos, req->misc.read.attr_ver); } fuse_invalidate_atime(inode); } Loading