All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch 7/7] reiser4: fixup checkin-checkout jnodes for entd
@ 2010-02-02  1:56 Edward Shishkin
  0 siblings, 0 replies; only message in thread
From: Edward Shishkin @ 2010-02-02  1:56 UTC (permalink / raw)
  To: Andrew Morton, ReiserFS Development List

The bug: reiser4_writeout() calls jput for jnode
which is already destroyed:

Fix up: take  the reference earler (at the point where the
jnode is attached for entd work).

Signed-off-by: Edward Shishkin <edward.shishkin@gmail.com>
---
 fs/reiser4/plugin/file/file.c |    6 ++++--
 fs/reiser4/vfs_ops.c          |    4 +++-
 2 files changed, 7 insertions(+), 3 deletions(-)

Index: linux-2.6.33-rc5-mm1/fs/reiser4/plugin/file/file.c
===================================================================
--- linux-2.6.33-rc5-mm1.orig/fs/reiser4/plugin/file/file.c
+++ linux-2.6.33-rc5-mm1/fs/reiser4/plugin/file/file.c
@@ -824,14 +824,16 @@ int find_or_create_extent(struct page *p
 
 	BUG_ON(node->atom == NULL);
 	JF_CLR(node, JNODE_WRITE_PREPARED);
-	jput(node);
 
 	if (get_current_context()->entd) {
 		entd_context *ent = get_entd_context(node->tree->super);
 
 		if (ent->cur_request->page == page)
-			ent->cur_request->node = node;
+			/* the following reference will be
+			   dropped in reiser4_writeout */
+			ent->cur_request->node = jref(node);
 	}
+	jput(node);
 	return 0;
 }
 
Index: linux-2.6.33-rc5-mm1/fs/reiser4/vfs_ops.c
===================================================================
--- linux-2.6.33-rc5-mm1.orig/fs/reiser4/vfs_ops.c
+++ linux-2.6.33-rc5-mm1/fs/reiser4/vfs_ops.c
@@ -184,7 +184,7 @@ void reiser4_writeout(struct super_block
 				 * requested page itself - start flush from
 				 * that page
 				 */
-				node = jref(ent->cur_request->node);
+				node = ent->cur_request->node;
 		}
 
 		result = flush_some_atom(node, &nr_submitted, wbc,
@@ -192,6 +192,8 @@ void reiser4_writeout(struct super_block
 		if (result != 0)
 			warning("nikita-31001", "Flush failed: %i", result);
 		if (node)
+			/* drop the reference aquired
+			   in find_or_create_extent() */
 			jput(node);
 		if (!nr_submitted)
 			break;

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2010-02-02  1:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-02  1:56 [patch 7/7] reiser4: fixup checkin-checkout jnodes for entd Edward Shishkin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.