xfs
[Top] [All Lists]

[PATCH 1/4] xfs: PF_FSTRANS should never be set in ->writepage

To: xfs@xxxxxxxxxxx
Subject: [PATCH 1/4] xfs: PF_FSTRANS should never be set in ->writepage
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Thu, 28 Apr 2011 08:55:47 -0400
References: <20110428125546.696493391@xxxxxxxxxxxxxxxxxxxxxx>
User-agent: quilt/0.48-1
Now that we reject direct reclaim in addition to always using GFP_NOFS
allocation there's no chance we'll ever end up in ->writepage with
PF_FSTRANS set.  Add a WARN_ON if we hit this case, and stop checking
if we'd actually need to start a transaction.

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

Index: linux-2.6/fs/xfs/linux-2.6/xfs_aops.c
===================================================================
--- linux-2.6.orig/fs/xfs/linux-2.6/xfs_aops.c  2011-04-27 20:51:57.503817127 
+0200
+++ linux-2.6/fs/xfs/linux-2.6/xfs_aops.c       2011-04-27 20:53:02.186800044 
+0200
@@ -906,7 +906,6 @@ xfs_vm_writepage(
        struct writeback_control *wbc)
 {
        struct inode            *inode = page->mapping->host;
-       int                     delalloc, unwritten;
        struct buffer_head      *bh, *head;
        struct xfs_bmbt_irec    imap;
        xfs_ioend_t             *ioend = NULL, *iohead = NULL;
@@ -938,15 +937,10 @@ xfs_vm_writepage(
                goto redirty;
 
        /*
-        * We need a transaction if there are delalloc or unwritten buffers
-        * on the page.
-        *
-        * If we need a transaction and the process flags say we are already
-        * in a transaction, or no IO is allowed then mark the page dirty
-        * again and leave the page as is.
+        * Given that we do not allow direct reclaim to call us we should
+        * never be called while in a filesystem transaction.
         */
-       xfs_count_page_state(page, &delalloc, &unwritten);
-       if ((current->flags & PF_FSTRANS) && (delalloc || unwritten))
+       if (WARN_ON(current->flags & PF_FSTRANS))
                goto redirty;
 
        /* Is this page beyond the end of the file? */

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