xfs
[Top] [All Lists]

[PATCH 08/10] xfs: remove the all_bh flag from xfs_convert_page

To: xfs@xxxxxxxxxxx
Subject: [PATCH 08/10] xfs: remove the all_bh flag from xfs_convert_page
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Mon, 22 Nov 2010 08:05:14 -0500
References: <20101122130506.868076797@xxxxxxxxxxxxxxxxxxxxxx>
User-agent: quilt/0.48-1
The all_bh flag is always set when entering the page clustering machinery
with a regular written extent, which means the check for it is superflous.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>

Index: xfs/fs/xfs/linux-2.6/xfs_aops.c
===================================================================
--- xfs.orig/fs/xfs/linux-2.6/xfs_aops.c        2010-11-19 15:07:33.000000000 
+0100
+++ xfs/fs/xfs/linux-2.6/xfs_aops.c     2010-11-19 15:07:59.221005096 +0100
@@ -682,8 +682,7 @@ xfs_convert_page(
        loff_t                  tindex,
        struct xfs_bmbt_irec    *imap,
        xfs_ioend_t             **ioendp,
-       struct writeback_control *wbc,
-       int                     all_bh)
+       struct writeback_control *wbc)
 {
        struct buffer_head      *bh, *head;
        xfs_off_t               end_offset;
@@ -738,11 +737,14 @@ xfs_convert_page(
                        continue;
                }
 
-               if (buffer_unwritten(bh) || buffer_delay(bh)) {
+               if (buffer_unwritten(bh) || buffer_delay(bh) ||
+                   buffer_mapped(bh)) {
                        if (buffer_unwritten(bh))
                                type = IO_UNWRITTEN;
-                       else
+                       else if (buffer_delay(bh))
                                type = IO_DELALLOC;
+                       else
+                               type = IO_OVERWRITE;
 
                        if (!xfs_imap_valid(inode, imap, offset)) {
                                done = 1;
@@ -752,23 +754,17 @@ xfs_convert_page(
                        ASSERT(imap->br_startblock != HOLESTARTBLOCK);
                        ASSERT(imap->br_startblock != DELAYSTARTBLOCK);
 
-                       xfs_map_at_offset(inode, bh, imap, offset);
+                       if (type == IO_OVERWRITE)
+                               lock_buffer(bh);
+                       else
+                               xfs_map_at_offset(inode, bh, imap, offset);
                        xfs_add_to_ioend(inode, bh, offset, type,
                                         ioendp, done);
 
                        page_dirty--;
                        count++;
                } else {
-                       type = IO_OVERWRITE;
-                       if (buffer_mapped(bh) && all_bh) {
-                               lock_buffer(bh);
-                               xfs_add_to_ioend(inode, bh, offset,
-                                               type, ioendp, done);
-                               count++;
-                               page_dirty--;
-                       } else {
-                               done = 1;
-                       }
+                       done = 1;
                }
        } while (offset += len, (bh = bh->b_this_page) != head);
 
@@ -800,7 +796,6 @@ xfs_cluster_write(
        struct xfs_bmbt_irec    *imap,
        xfs_ioend_t             **ioendp,
        struct writeback_control *wbc,
-       int                     all_bh,
        pgoff_t                 tlast)
 {
        struct pagevec          pvec;
@@ -815,7 +810,7 @@ xfs_cluster_write(
 
                for (i = 0; i < pagevec_count(&pvec); i++) {
                        done = xfs_convert_page(inode, pvec.pages[i], tindex++,
-                                       imap, ioendp, wbc, all_bh);
+                                       imap, ioendp, wbc);
                        if (done)
                                break;
                }
@@ -974,7 +969,6 @@ xfs_vm_writepage(
        ssize_t                 len;
        int                     err, imap_valid = 0, uptodate = 1;
        int                     count = 0;
-       int                     all_bh = 0;
        int                     nonblocking = 0;
 
        trace_xfs_writepage(inode, page, 0);
@@ -1110,7 +1104,6 @@ xfs_vm_writepage(
                        }
 
                        if (imap_valid) {
-                               all_bh = 1;
                                lock_buffer(bh);
                                xfs_add_to_ioend(inode, bh, offset, type,
                                                &ioend, new_ioend);
@@ -1147,7 +1140,7 @@ xfs_vm_writepage(
                        end_index = last_index;
 
                xfs_cluster_write(inode, page->index + 1, &imap, &ioend,
-                                       wbc, all_bh, end_index);
+                                 wbc, end_index);
        }
 
        if (iohead)

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