Subject: Re: p_flag in struct proc: int -> uint64_t
To: Jason Thorpe <thorpej@shagadelic.org>
From: Juergen Hannken-Illjes <hannken@eis.cs.tu-bs.de>
List: tech-kern
Date: 10/11/2006 12:30:30
On Tue, Oct 10, 2006 at 03:51:13PM -0700, Jason Thorpe wrote:
> 
> On Oct 10, 2006, at 8:53 AM, Juergen Hannken-Illjes wrote:
> 
> >At the moment it is used only for genfs_putpages() when it has either
> >PGO_SYNCIO|PGO_CLEANIT set or is from pagedaemon.  The error gets up
> >to the caller of genfs_putpages().
> 
> ...and what is the caller of genfs_putpages() supposed to do to recover?

Good question.  I used it here because of this comment above genfs_putpages():

 * => if neither PGO_CLEANIT nor PGO_SYNCIO is set, then we will neither
 *      unlock the object nor block.

Fstrans_start() is only needed if PGO_CLEANIT is set.  So it looks like I
implemented a NOP in this case.

What is left is the case where genfs_putpages() is called from the pagedaemon.
Here it is ok to block (PGO_CLEANIT is set).

If I got it right it is sufficient to implement FSTRANS_NOWAIT as
"fail if suspension in progress" and don't propagate the nowait condition
to pool_get() or lwp_setspecific().

Will try once I have a working machine to test ...

-- 
Juergen Hannken-Illjes - hannken@eis.cs.tu-bs.de - TU Braunschweig (Germany)