Merge tag 'xfs-5.3-merge-12' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
[linux-2.6-block.git] / fs / xfs / xfs_aops.c
index 137b3a273f3d4670f6d8397ba867484bd6f69709..761248ee27785afe07be567cf9d4aa87705aa031 100644 (file)
@@ -766,6 +766,7 @@ xfs_add_to_ioend(
        struct block_device     *bdev = xfs_find_bdev_for_inode(inode);
        unsigned                len = i_blocksize(inode);
        unsigned                poff = offset & (PAGE_SIZE - 1);
+       bool                    merged, same_page = false;
        sector_t                sector;
 
        sector = xfs_fsb_to_db(ip, wpc->imap.br_startblock) +
@@ -782,10 +783,14 @@ xfs_add_to_ioend(
                                wpc->imap.br_state, offset, bdev, sector, wbc);
        }
 
-       if (!__bio_try_merge_page(wpc->ioend->io_bio, page, len, poff, true)) {
-               if (iop)
-                       atomic_inc(&iop->write_count);
-               if (bio_full(wpc->ioend->io_bio))
+       merged = __bio_try_merge_page(wpc->ioend->io_bio, page, len, poff,
+                       &same_page);
+
+       if (iop && !same_page)
+               atomic_inc(&iop->write_count);
+
+       if (!merged) {
+               if (bio_full(wpc->ioend->io_bio, len))
                        wpc->ioend->io_bio = xfs_chain_bio(wpc->ioend->io_bio);
                bio_add_page(wpc->ioend->io_bio, page, len, poff);
        }