mirror of https://gitee.com/openkylin/linux.git
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse
Pull fuse fixes from Miklos Szeredi: "Fix a few bugs in fuse" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse: fuse: set mapping error in writepage_locked when it fails fuse: Dont call set_page_dirty_lock() for ITER_BVEC pages for async_dio fuse: initialize the flock flag in fuse_file on allocation
This commit is contained in:
commit
2bfc37cdef
|
@ -46,7 +46,7 @@ struct fuse_file *fuse_file_alloc(struct fuse_conn *fc)
|
|||
{
|
||||
struct fuse_file *ff;
|
||||
|
||||
ff = kmalloc(sizeof(struct fuse_file), GFP_KERNEL);
|
||||
ff = kzalloc(sizeof(struct fuse_file), GFP_KERNEL);
|
||||
if (unlikely(!ff))
|
||||
return NULL;
|
||||
|
||||
|
@ -609,7 +609,7 @@ static void fuse_aio_complete_req(struct fuse_conn *fc, struct fuse_req *req)
|
|||
struct fuse_io_priv *io = req->io;
|
||||
ssize_t pos = -1;
|
||||
|
||||
fuse_release_user_pages(req, !io->write);
|
||||
fuse_release_user_pages(req, io->should_dirty);
|
||||
|
||||
if (io->write) {
|
||||
if (req->misc.write.in.size != req->misc.write.out.size)
|
||||
|
@ -1316,7 +1316,6 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter,
|
|||
loff_t *ppos, int flags)
|
||||
{
|
||||
int write = flags & FUSE_DIO_WRITE;
|
||||
bool should_dirty = !write && iter_is_iovec(iter);
|
||||
int cuse = flags & FUSE_DIO_CUSE;
|
||||
struct file *file = io->file;
|
||||
struct inode *inode = file->f_mapping->host;
|
||||
|
@ -1346,6 +1345,7 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter,
|
|||
inode_unlock(inode);
|
||||
}
|
||||
|
||||
io->should_dirty = !write && iter_is_iovec(iter);
|
||||
while (count) {
|
||||
size_t nres;
|
||||
fl_owner_t owner = current->files;
|
||||
|
@ -1360,7 +1360,7 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter,
|
|||
nres = fuse_send_read(req, io, pos, nbytes, owner);
|
||||
|
||||
if (!io->async)
|
||||
fuse_release_user_pages(req, should_dirty);
|
||||
fuse_release_user_pages(req, io->should_dirty);
|
||||
if (req->out.h.error) {
|
||||
err = req->out.h.error;
|
||||
break;
|
||||
|
@ -1669,6 +1669,7 @@ static int fuse_writepage_locked(struct page *page)
|
|||
err_free:
|
||||
fuse_request_free(req);
|
||||
err:
|
||||
mapping_set_error(page->mapping, error);
|
||||
end_page_writeback(page);
|
||||
return error;
|
||||
}
|
||||
|
|
|
@ -249,6 +249,7 @@ struct fuse_io_priv {
|
|||
size_t size;
|
||||
__u64 offset;
|
||||
bool write;
|
||||
bool should_dirty;
|
||||
int err;
|
||||
struct kiocb *iocb;
|
||||
struct file *file;
|
||||
|
|
Loading…
Reference in New Issue