diff options
Diffstat (limited to 'fs/ceph')
-rw-r--r-- | fs/ceph/addr.c | 10 |
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); |