The uio_yield() idea did not work. Still have the same 31 second interval
packet loss.

Is it safe to assume the vp will be valid after a msleep() or uio_yield()? If
so can we do something a little different:
Currently:

/* this takes too long when list is large */
MNT_VNODE_FOREACH(vp, mp, mvp) {
 do work
}

Why not do this incrementally and call ffs_sync() more often, or
break it out into ffs_isync() (incremental sync).

static struct vnode *vp;

/* first? */
if (!vp)
  vp = __mnt_vnode_first(&mvp, mp);

for (vcount = 0; vp && (vcount != 500); ++vcount) {
  do work
  vp = __mnt_vnode_next(&mvp, mp);
}

The problem I see with this is a race condition where this list may change
between the incremental calls.

--
mark

On Dec 21, 2007, at 6:43 PM, David G Lawrence wrote:

Unfortunately, the version of the patch that I sent out isn't going to help your problem. It needs to yield at the top of the loop, but vp isn't necessarily valid after the wakeup from the msleep. That's a problem that I'm having trouble figuring out a solution to - the solutions that come
to mind will all significantly increase the overhead of the loop.
I apologize for not reading the code as I am swamped, but a technique
that Matt Dillon used for bufs might work here.

Can you use a placeholder vnode as a place to restart the scan?
you might have to mark it special so that other threads/things
(getnewvnode()?) don't molest it, but it can provide for a convenient
restart point.
   That was one of the solutions that I considered and rejected  
since it
would significantly increase the overhead of the loop.
The solution provided by Kostik Belousov that uses uio_yield looks like
a find solution. I intend to try it out on some servers RSN.

-DG

David G. Lawrence
President
Download Technologies, Inc. - http://www.downloadtech.com - (866) 399 8500
The FreeBSD Project - http://www.freebsd.org
Pave the road of life with opportunities.
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"
_______________________________________________
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to