mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Mark Fasheh <mfasheh@suse.com>
To: linux-kernel@vger.kernel.org
Cc: Mark Fasheh <mfasheh@suse.com>,
	ocfs2-devel@oss.oracle.com, Joel Becker <joel.becker@oracle.com>,
	Coly Li <coyli@suse.de>
Subject: [PATCH 17/17] [PATCH] ocfs2: fix oops in mmap_truncate testing
Date: Mon, 14 Jul 2008 15:01:50 -0700	[thread overview]
Message-ID: <1216072910-27226-18-git-send-email-mfasheh@suse.com> (raw)
In-Reply-To: <1216072910-27226-1-git-send-email-mfasheh@suse.com>

From: Coly Li <coyli@suse.de>

This patch fixes a mmap_truncate bug which was found by ocfs2 test suite.

In an ocfs2 cluster more than 1 node, run program mmap_truncate, which races
mmap writes and truncates from multiple processes. While the test is
running, a stat from another node forces writeout, causing an oops in
ocfs2_get_block() because it sees a buffer to write which isn't allocated.

This patch fixed the bug by clear dirty and uptodate bits in buffer, leave
the buffer unmapped and return.

Fix is suggested by Mark Fasheh, and I code up the patch.

Signed-off-by: Coly Li <coyli@suse.de>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
---
 fs/ocfs2/aops.c |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
index 17964c0..b74a702 100644
--- a/fs/ocfs2/aops.c
+++ b/fs/ocfs2/aops.c
@@ -179,6 +179,23 @@ static int ocfs2_get_block(struct inode *inode, sector_t iblock,
 			"ino %lu, iblock %llu\n", inode->i_ino,
 			(unsigned long long)iblock);
 
+	/*
+	 * ocfs2 never allocates in this function - the only time we
+	 * need to use BH_New is when we're extending i_size on a file
+	 * system which doesn't support holes, in which case BH_New
+	 * allows block_prepare_write() to zero.
+	 *
+	 * If we see this on a sparse file system, then a truncate has
+	 * raced us and removed the cluster. In this case, we clear
+	 * the buffers dirty and uptodate bits and let the buffer code
+	 * ignore it as a hole.
+	 */
+	if (create && p_blkno == 0 && ocfs2_sparse_alloc(osb)) {
+		clear_buffer_dirty(bh_result);
+		clear_buffer_uptodate(bh_result);
+		goto bail;
+	}
+
 	/* Treat the unwritten extent as a hole for zeroing purposes. */
 	if (p_blkno && !(ext_flags & OCFS2_EXT_UNWRITTEN))
 		map_bh(bh_result, inode->i_sb, p_blkno);
-- 
1.5.4.1


      parent reply	other threads:[~2008-07-14 22:08 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-14 22:01 [git patches] Ocfs2 and Configfs updates for 2.6.27 Mark Fasheh
2008-07-14 22:01 ` [PATCH 01/17] ocfs2: Add CONFIG_OCFS2_FS_STATS config option Mark Fasheh
2008-07-14 22:01 ` [PATCH 02/17] ocfs2: Instrument fs cluster locks Mark Fasheh
2008-07-14 22:01 ` [PATCH 03/17] ocfs2: fix printk format warnings with OCFS2_FS_STATS=n Mark Fasheh
2008-07-14 22:01 ` [PATCH 04/17] ocfs2: use simple_read_from_buffer() Mark Fasheh
2008-07-14 22:01 ` [PATCH 05/17] ocfs2: Silence an error message in ocfs2_file_aio_read() Mark Fasheh
2008-07-14 22:01 ` [PATCH 06/17] ocfs2: Handle error during journal load Mark Fasheh
2008-07-14 22:01 ` [PATCH 07/17] ocfs2/net: Silence build warnings on sparc64 Mark Fasheh
2008-07-14 22:01 ` [PATCH 08/17] ocfs2: Fix CONFIG_OCFS2_DEBUG_FS #ifdefs Mark Fasheh
2008-07-14 22:01 ` [PATCH 09/17] ocfs2: Don't snprintf() without a format Mark Fasheh
2008-07-14 22:01 ` [PATCH 10/17] configfs: Introduce configfs_dirent_lock Mark Fasheh
2008-07-14 22:01 ` [PATCH 11/17] configfs: Protect configfs_dirent s_links list mutations Mark Fasheh
2008-07-14 22:01 ` [PATCH 12/17] configfs: Make configfs_new_dirent() return error code instead of NULL Mark Fasheh
2008-07-14 22:01 ` [PATCH 13/17] configfs: Fix deadlock with racing rmdir() and rename() Mark Fasheh
2008-07-14 22:01 ` [PATCH 14/17] configfs: Fix failing mkdir() making racing rmdir() fail Mark Fasheh
2008-07-14 22:01 ` [PATCH 15/17] configfs: Allow ->make_item() and ->make_group() to return detailed errors Mark Fasheh
2008-07-14 22:01 ` [PATCH 16/17] configfs: call drop_link() to cleanup after create_link() failure Mark Fasheh
2008-07-14 22:01 ` Mark Fasheh [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1216072910-27226-18-git-send-email-mfasheh@suse.com \
    --to=mfasheh@suse.com \
    --cc=coyli@suse.de \
    --cc=joel.becker@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ocfs2-devel@oss.oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®