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 tag 'ceph-for-4.16-rc8' of git://github.com/ceph/ceph-client

Pull ceph fix from Ilya Dryomov:
"A fix for a dio-enabled loop on ceph deadlock from Zheng, marked for
stable"

* tag 'ceph-for-4.16-rc8' of git://github.com/ceph/ceph-client:
ceph: only dirty ITER_IOVEC pages for direct read

+6 -3
+6 -3
fs/ceph/file.c
··· 640 640 struct ceph_aio_request { 641 641 struct kiocb *iocb; 642 642 size_t total_len; 643 - int write; 643 + bool write; 644 + bool should_dirty; 644 645 int error; 645 646 struct list_head osd_reqs; 646 647 unsigned num_reqs; ··· 751 750 } 752 751 } 753 752 754 - ceph_put_page_vector(osd_data->pages, num_pages, !aio_req->write); 753 + ceph_put_page_vector(osd_data->pages, num_pages, aio_req->should_dirty); 755 754 ceph_osdc_put_request(req); 756 755 757 756 if (rc < 0) ··· 848 847 size_t count = iov_iter_count(iter); 849 848 loff_t pos = iocb->ki_pos; 850 849 bool write = iov_iter_rw(iter) == WRITE; 850 + bool should_dirty = !write && iter_is_iovec(iter); 851 851 852 852 if (write && ceph_snap(file_inode(file)) != CEPH_NOSNAP) 853 853 return -EROFS; ··· 916 914 if (aio_req) { 917 915 aio_req->iocb = iocb; 918 916 aio_req->write = write; 917 + aio_req->should_dirty = should_dirty; 919 918 INIT_LIST_HEAD(&aio_req->osd_reqs); 920 919 if (write) { 921 920 aio_req->mtime = mtime; ··· 974 971 len = ret; 975 972 } 976 973 977 - ceph_put_page_vector(pages, num_pages, !write); 974 + ceph_put_page_vector(pages, num_pages, should_dirty); 978 975 979 976 ceph_osdc_put_request(req); 980 977 if (ret < 0)