diff mbox series

[19/19] orangefs: do writepages_work if a single page must be written

Message ID 20181007232736.3780-20-martin@omnibond.com (mailing list archive)
State New, archived
Headers show
Series [01/19] orangefs: implement xattr cache | expand

Commit Message

Martin Brandenburg Oct. 7, 2018, 11:27 p.m. UTC
Otherwise the next page can't possibly be an append and it'll
just sit there and write pages one by one until it flushes the
saved region at the very end.

Signed-off-by: Martin Brandenburg <martin@omnibond.com>
---
 fs/orangefs/inode.c | 8 ++++++++
 1 file changed, 8 insertions(+)
diff mbox series

Patch

diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c
index 20950f3f758a..cd1263c45bb2 100644
--- a/fs/orangefs/inode.c
+++ b/fs/orangefs/inode.c
@@ -307,6 +307,10 @@  static int orangefs_writepages_callback(struct page *page,
 	wr = (struct orangefs_write_request *)page_private(page);
 
 	if (wr->len != PAGE_SIZE) {
+		if (ow->npages) {
+			orangefs_writepages_work(ow, wbc);
+			ow->npages = 0;
+		}
 		ret = orangefs_writepage_locked(page, wbc);
 		mapping_set_error(page->mapping, ret);
 		unlock_page(page);
@@ -335,6 +339,10 @@  static int orangefs_writepages_callback(struct page *page,
 		}
 done:
 		if (ret == -1) {
+			if (ow->npages) {
+				orangefs_writepages_work(ow, wbc);
+				ow->npages = 0;
+			}
 			ret = orangefs_writepage_locked(page, wbc);
 			mapping_set_error(page->mapping, ret);
 			unlock_page(page);