Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse

Pull fuse fix from Miklos Szeredi:
"This fixes a deadlock when fuse, direct I/O and loop device are
combined"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:
fuse: direct-io: don't dirty ITER_BVEC pages

+4 -3
+4 -3
fs/fuse/file.c
··· 530 530 req->out.args[0].size = count; 531 531 } 532 532 533 - static void fuse_release_user_pages(struct fuse_req *req, int write) 533 + static void fuse_release_user_pages(struct fuse_req *req, bool should_dirty) 534 534 { 535 535 unsigned i; 536 536 537 537 for (i = 0; i < req->num_pages; i++) { 538 538 struct page *page = req->pages[i]; 539 - if (write) 539 + if (should_dirty) 540 540 set_page_dirty_lock(page); 541 541 put_page(page); 542 542 } ··· 1320 1320 loff_t *ppos, int flags) 1321 1321 { 1322 1322 int write = flags & FUSE_DIO_WRITE; 1323 + bool should_dirty = !write && iter_is_iovec(iter); 1323 1324 int cuse = flags & FUSE_DIO_CUSE; 1324 1325 struct file *file = io->file; 1325 1326 struct inode *inode = file->f_mapping->host; ··· 1364 1363 nres = fuse_send_read(req, io, pos, nbytes, owner); 1365 1364 1366 1365 if (!io->async) 1367 - fuse_release_user_pages(req, !write); 1366 + fuse_release_user_pages(req, should_dirty); 1368 1367 if (req->out.h.error) { 1369 1368 err = req->out.h.error; 1370 1369 break;