xfs
[Top] [All Lists]

[PATCH 1/4] xfs: remove nonblocking mode from xfs_vm_writepage

To: xfs@xxxxxxxxxxx
Subject: [PATCH 1/4] xfs: remove nonblocking mode from xfs_vm_writepage
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Tue, 25 Aug 2015 15:05:50 +1000
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1440479153-1584-1-git-send-email-david@xxxxxxxxxxxxx>
References: <1440479153-1584-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 in the 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 | 20 +++-----------------
 1 file changed, 3 insertions(+), 17 deletions(-)

diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
index 3859f5e..89fad6b 100644
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -276,8 +276,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;
@@ -293,12 +292,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);
@@ -949,7 +943,6 @@ xfs_vm_writepage(
        ssize_t                 len;
        int                     err, imap_valid = 0, uptodate = 1;
        int                     count = 0;
-       int                     nonblocking = 0;
 
        trace_xfs_writepage(inode, page, 0, 0);
 
@@ -1049,9 +1042,6 @@ xfs_vm_writepage(
        offset = page_offset(page);
        type = XFS_IO_OVERWRITE;
 
-       if (wbc->sync_mode == WB_SYNC_NONE)
-               nonblocking = 1;
-
        do {
                int new_ioend = 0;
 
@@ -1111,8 +1101,7 @@ xfs_vm_writepage(
                         * time.
                         */
                        new_ioend = 1;
-                       err = xfs_map_blocks(inode, offset, &imap, type,
-                                            nonblocking);
+                       err = xfs_map_blocks(inode, offset, &imap, type);
                        if (err)
                                goto error;
                        imap_valid = xfs_imap_valid(inode, &imap, offset);
@@ -1182,9 +1171,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>