Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 3 Mar 2004 01:08:38 +0600
From:      Max Khon <fjoe@iclub.nsu.ru>
To:        rjshang <rjshang@synology.com>
Cc:        freebsd-fs@freebsd.org
Subject:   Re: Is that a typo in ffs_softdep.c
Message-ID:  <20040302190838.GB38981@iclub.nsu.ru>
In-Reply-To: <20040213091617.M29405@synology.com>
References:  <20040213091617.M29405@synology.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Hello!

On Fri, Feb 13, 2004 at 05:16:17PM +0800, rjshang wrote:

> It looks like a typo in ffs_softdep.c softdep_sync_metadata().
> The second parameter of drain_output is used to tell if it is 
> protected by &lk.
> Is there other concern?
> Please check the following patch from 4.9 release.
>
> --- ffs_softdep.c	Wed Feb  6 02:46:53 2002
> +++ ffs_softdep.new.c	Fri Feb 13 16:48:52 2004
> @@ -4299,29 +4299,29 @@
>  		return (0);
>  	}
>  
>  	FREE_LOCK(&lk);
>  	/*
>  	 * If we are trying to sync a block device, some of its buffers may
>  	 * contain metadata that cannot be written until the contents of 
> some
>  	 * partially written files have been written to disk. The only easy
>  	 * way to accomplish this is to sync the entire filesystem (luckily
>  	 * this happens rarely).
>  	 *
>  	 * We must wait for any I/O in progress to finish so that
>  	 * all potential buffers on the dirty list will be visible.
>  	 */
> -	drain_output(vp, 1);
> +	drain_output(vp, 0);
>  	if (vn_isdisk(vp, NULL) && 
>  	    vp->v_specmountpoint && !VOP_ISLOCKED(vp, NULL) &&
>  	    (error = VFS_SYNC(vp->v_specmountpoint, MNT_WAIT, ap->a_cred,
>  	     ap->a_p)) != 0)
>  		return (error);
>  	return (0);
>  }
>  
>  /*
>   * Flush the dependencies associated with an inodedep.
>   * Called with splbio blocked.
>   */
>  static int
>  flush_inodedep_deps(fs, ino)

Nice catch!

drain_output() should be called earlier (before chechkig dirty list).
The bug was introduced in ffs_softdep.c rev. 1.57.2.10.
Correct patch is attached.
I sent this patch to Kirk for review and will commit it as soon as I get
an approval from him.

/fjoe



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040302190838.GB38981>