This is a multi-part message in MIME format.
--------------020807070709030700060709
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

David O'Brien wrote:
> On Wed, Mar 12, 2008 at 10:16:31AM -0400, Coleman Kane wrote:
>
>> I am attaching the revised patch.
>>

> ..
>
>> + callout_reset(&softdep_callout, tickdelay > 2 ? tickdelay : 2, pause_timer, 0);
>>

>
> Wrap long line.
>
>
>> + /* The callout_ API has acquired mtx and will hold it around this function call. */
>>

>
> Ditto.
>
>
>> + callout_reset(&softdep_callout, tickdelay > 2 ? tickdelay : 2, pause_timer, 0);
>>

>
> Ditto.
>

Third try at the patch, properly adjusting my vim tabs to 8 spaces as
they should be so that I can follow style(9).

--
Coleman Kane


--------------020807070709030700060709
Content-Type: text/x-patch;
name="ffs_softdep.c-newcallout3.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="ffs_softdep.c-newcallout3.diff"

diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c
index 3e8ba26..457ed49 100644
--- a/sys/ufs/ffs/ffs_softdep.c
+++ b/sys/ufs/ffs/ffs_softdep.c
@@ -664,7 +664,7 @@ static int maxindirdeps = 50; /* max number of indirdeps before slowdown */
static int tickdelay = 2; /* number of ticks to pause during slowdown */
static int proc_waiting; /* tracks whether we have a timeout posted */
static int *stat_countp; /* statistic to count in proc_waiting timeout */
-static struct callout_handle handle; /* handle on posted proc_waiting timeout */
+static struct callout softdep_callout;
static int req_pending;
static int req_clear_inodedeps; /* syncer process flush some inodedeps */
#define FLUSH_INODES 1
@@ -1394,6 +1394,9 @@ softdep_initialize()
bioops.io_complete = softdep_disk_write_complete;
bioops.io_deallocate = softdep_deallocate_dependencies;
bioops.io_countdeps = softdep_count_dependencies;
+
+ /* Initialize the callout with an mtx. */
+ callout_init_mtx(&softdep_callout, &lk, 0);
}

/*
@@ -1404,6 +1407,7 @@ void
softdep_uninitialize()
{

+ callout_drain(&softdep_callout);
hashdestroy(pagedep_hashtbl, M_PAGEDEP, pagedep_hash);
hashdestroy(inodedep_hashtbl, M_INODEDEP, inodedep_hash);
hashdestroy(newblk_hashtbl, M_NEWBLK, newblk_hash);
@@ -5858,8 +5862,10 @@ request_cleanup(mp, resource)
* We wait at most tickdelay before proceeding in any case.
*/
proc_waiting += 1;
- if (handle.callout == NULL)
- handle = timeout(pause_timer, 0, tickdelay > 2 ? tickdelay : 2);
+ if (callout_pending(&softdep_callout) == FALSE) {
+ callout_reset(&softdep_callout, tickdelay > 2 ? tickdelay : 2,
+ pause_timer, 0);
+ }
msleep((caddr_t)&proc_waiting, &lk, PPAUSE, "softupdate", 0);
proc_waiting -= 1;
return (1);
@@ -5874,14 +5880,16 @@ pause_timer(arg)
void *arg;
{

- ACQUIRE_LOCK(&lk);
+ /*
+ * The callout_ API has acquired mtx and will hold it around this
+ * function call.
+ */
*stat_countp += 1;
wakeup_one(&proc_waiting);
- if (proc_waiting > 0)
- handle = timeout(pause_timer, 0, tickdelay > 2 ? tickdelay : 2);
- else
- handle.callout = NULL;
- FREE_LOCK(&lk);
+ if (proc_waiting > 0) {
+ callout_reset(&softdep_callout, tickdelay > 2 ? tickdelay : 2,
+ pause_timer, 0);
+ }
}

/*

--------------020807070709030700060709
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
freebsd-arch@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-arch
To unsubscribe, send any mail to "freebsd-arch-unsubscribe@freebsd.org"
--------------020807070709030700060709--