Hello,
On 30 August 2006 01:10, Andrew James Wade wrote:
> Hello Alexander,
>
> In addition to your patch, I've also applied the patch below. With
> these two patches the fs is much more stable for me.
That code was removed from reiser4 recently, the patch will be in the
next -mm kernel.
I knew there was a bug somewhere :)
>
> However, something is holding a d_ref across the calls to
> reiser4_writepage. It's not clear to me that this is allowed so my
> patch may not be a full fix.
>
> Andrew Wade
>
> signed-off-by: <[EMAIL PROTECTED]>
>
> diff -rupN a/fs/reiser4/plugin/item/extent_file_ops.c
> b/fs/reiser4/plugin/item/extent_file_ops.c ---
> a/fs/reiser4/plugin/item/extent_file_ops.c 2006-08-28
> 11:30:33.000000000 -0400 +++
> b/fs/reiser4/plugin/item/extent_file_ops.c 2006-08-29
> 13:06:20.000000000 -0400 @@ -1320,20 +1320,22 @@ static int
> extent_readpage_filler(void * TWIG_LEVEL, CBK_UNIQUE, NULL);
> if (result != CBK_COORD_FOUND) {
> reiser4_unset_hint(hint);
> - return result;
> + goto out;
> }
> ext_coord->valid = 0;
> }
>
> if (zload(ext_coord->coord.node)) {
> reiser4_unset_hint(hint);
> - return RETERR(-EIO);
> + result = RETERR(-EIO);
> + goto out;
> }
> if (!item_is_extent(&ext_coord->coord)) {
> /* tail conversion is running in parallel */
> zrelse(ext_coord->coord.node);
> reiser4_unset_hint(hint);
> - return RETERR(-EIO);
> + result = RETERR(-EIO);
> + goto out;
> }
>
> if (ext_coord->valid == 0)
> @@ -1358,6 +1360,10 @@ static int extent_readpage_filler(void *
> } else
> reiser4_unset_hint(hint);
> zrelse(ext_coord->coord.node);
> +
> +out:
> + /* Calls to this function may be intermingled with VM writeback. */
> + reiser4_txn_restart_current();
> return result;
> }
>
>
> !DSPAM:44f4ad37293861987214747!
Thanks,
Alex.