aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ceph')
-rw-r--r--fs/ceph/addr.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
index a3bd9deb555c..8065dc92c611 100644
--- a/fs/ceph/addr.c
+++ b/fs/ceph/addr.c
@@ -524,9 +524,13 @@ static void writepages_finish(struct ceph_osd_request *req,
524 bytes = le64_to_cpu(op->extent.length); 524 bytes = le64_to_cpu(op->extent.length);
525 525
526 if (rc >= 0) { 526 if (rc >= 0) {
527 wrote = (bytes + (offset & ~PAGE_CACHE_MASK) + ~PAGE_CACHE_MASK) 527 /*
528 >> PAGE_CACHE_SHIFT; 528 * Assume we wrote the pages we originally sent. The
529 WARN_ON(wrote != req->r_num_pages); 529 * osd might reply with fewer pages if our writeback
530 * raced with a truncation and was adjusted at the osd,
531 * so don't believe the reply.
532 */
533 wrote = req->r_num_pages;
530 } else { 534 } else {
531 wrote = 0; 535 wrote = 0;
532 mapping_set_error(mapping, rc); 536 mapping_set_error(mapping, rc);