Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 1 Oct 2014 20:18:25 +0200
From:      Mateusz Guzik <mjguzik@gmail.com>
To:        Will Andrews <will@FreeBSD.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r272366 - head/sys/kern
Message-ID:  <20141001181825.GA16048@dft-labs.eu>
In-Reply-To: <201410011532.s91FWTZL050853@svn.freebsd.org>
References:  <201410011532.s91FWTZL050853@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Oct 01, 2014 at 03:32:29PM +0000, Will Andrews wrote:
> Author: will
> Date: Wed Oct  1 15:32:28 2014
> New Revision: 272366
> URL: https://svnweb.freebsd.org/changeset/base/272366
> 
> Log:
>   In the syncer, drop the sync mutex while patting the watchdog.
>   
>   Some watchdog drivers (like ipmi) need to sleep while patting the watchdog.
>   See sys/dev/ipmi/ipmi.c:ipmi_wd_event(), which calls malloc(M_WAITOK).
>   

Is not such malloc inherently bad in case of watchdog?

It looks like the code waits for request completion and then frees it
unconditionally. As such, a local var on stack would do the trick.

The code msleeps later, so this hack of dropping sync_mtx is still
needed.



>   Submitted by:	asomers
>   MFC after:	1 month
>   Sponsored by:	Spectra Logic
>   MFSpectraBSD:	637548 on 2012/10/04
> 
> Modified:
>   head/sys/kern/vfs_subr.c
> 
> Modified: head/sys/kern/vfs_subr.c
> ==============================================================================
> --- head/sys/kern/vfs_subr.c	Wed Oct  1 15:23:23 2014	(r272365)
> +++ head/sys/kern/vfs_subr.c	Wed Oct  1 15:32:28 2014	(r272366)
> @@ -1863,8 +1863,15 @@ sched_sync(void)
>  				continue;
>  			}
>  
> -			if (first_printf == 0)
> +			if (first_printf == 0) {
> +				/*
> +				 * Drop the sync mutex, because some watchdog
> +				 * drivers need to sleep while patting
> +				 */
> +				mtx_unlock(&sync_mtx);
>  				wdog_kern_pat(WD_LASTVAL);
> +				mtx_lock(&sync_mtx);
> +			}
>  
>  		}
>  		if (syncer_state == SYNCER_FINAL_DELAY && syncer_final_iter > 0)
> 

-- 
Mateusz Guzik <mjguzik gmail.com>



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