xfs
[Top] [All Lists]

[PATCH 3/8] xfs: remove nonblocking mode from xfs_vm_writepage

To: xfs@xxxxxxxxxxx
Subject: [PATCH 3/8] xfs: remove nonblocking mode from xfs_vm_writepage
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Wed, 12 Aug 2015 08:49:43 +1000
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1439333388-16452-1-git-send-email-david@xxxxxxxxxxxxx>
References: <1439333388-16452-1-git-send-email-david@xxxxxxxxxxxxx>
From: Dave Chinner <dchinner@xxxxxxxxxx>

Remove the nonblocking optimisation done for mapping lookups during
writeback. It's not clear that leaving a hole in the writeback range
just because we couldn't get a lock is really a win, as it makes us
do another small random IO later on rather than a large sequential
IO now.

As this gets inteh way of sane error handling later on, just remove
for the moment and we can re-introduce an equivalent optimisation in
future if we see problems due to extent map lock contention.

Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
---
 fs/xfs/xfs_aops.c | 19 +++----------------
 1 file changed, 3 insertions(+), 16 deletions(-)

diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
index 4d5479d..b718156 100644
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -285,8 +285,7 @@ xfs_map_blocks(
        struct inode            *inode,
        loff_t                  offset,
        struct xfs_bmbt_irec    *imap,
-       int                     type,
-       int                     nonblocking)
+       int                     type)
 {
        struct xfs_inode        *ip = XFS_I(inode);
        struct xfs_mount        *mp = ip->i_mount;
@@ -302,12 +301,7 @@ xfs_map_blocks(
        if (type == XFS_IO_UNWRITTEN)
                bmapi_flags |= XFS_BMAPI_IGSTATE;
 
-       if (!xfs_ilock_nowait(ip, XFS_ILOCK_SHARED)) {
-               if (nonblocking)
-                       return -EAGAIN;
-               xfs_ilock(ip, XFS_ILOCK_SHARED);
-       }
-
+       xfs_ilock(ip, XFS_ILOCK_SHARED);
        ASSERT(ip->i_d.di_format != XFS_DINODE_FMT_BTREE ||
               (ip->i_df.if_flags & XFS_IFEXTENTS));
        ASSERT(offset <= mp->m_super->s_maxbytes);
@@ -958,7 +952,6 @@ xfs_do_writepage(
        ssize_t                 len;
        int                     err, uptodate = 1;
        int                     count = 0;
-       int                     nonblocking = 0;
 
        trace_xfs_writepage(inode, page, 0, 0);
 
@@ -1057,9 +1050,6 @@ xfs_do_writepage(
        bh = head = page_buffers(page);
        offset = page_offset(page);
 
-       if (wbc->sync_mode == WB_SYNC_NONE)
-               nonblocking = 1;
-
        do {
                int new_ioend = 0;
 
@@ -1121,7 +1111,7 @@ xfs_do_writepage(
                         */
                        new_ioend = 1;
                        err = xfs_map_blocks(inode, offset, &wpc->imap,
-                                            wpc->io_type, nonblocking);
+                                            wpc->io_type);
                        if (err)
                                goto error;
                        wpc->imap_valid = xfs_imap_valid(inode, &wpc->imap,
@@ -1192,9 +1182,6 @@ error:
        if (iohead)
                xfs_cancel_ioend(iohead);
 
-       if (err == -EAGAIN)
-               goto redirty;
-
        xfs_aops_discard_page(page);
        ClearPageUptodate(page);
        unlock_page(page);
-- 
2.5.0

<Prev in Thread] Current Thread [Next in Thread>