[PATCH]: possible fix for the fifoor problem

Jung-uk Kim jkim at FreeBSD.org
Tue Nov 7 17:01:39 UTC 2006


On Tuesday 07 November 2006 11:39 am, John E Hein wrote:
> Divacky Roman wrote at 18:40 +0100 on Nov  6, 2006:
>  > pls test
>  > www.stud.fit.vutbr.cz/~xdivac02/linux-fifoor.patch
>  >
>  > and tell me if that helps you with fifoor affected tests (dup05,
>  > select03)
>  >
>  > I cannot afford panic now so I am unable to test ;( and wider
>  > testing never hurts :)
>
> The patch fails against RELENG_6 and -CURRENT.
> It is probably against a local or p4 version?
>
> Here's one against RELENG_6 (that should also work for current).
>
> Index: sys/compat/linux/linux_file.c
> ===================================================================
> RCS file: /base/FreeBSD-CVS/src/sys/compat/linux/linux_file.c,v
> retrieving revision 1.91.2.1
> diff -u -p -r1.91.2.1 linux_file.c
> --- sys/compat/linux/linux_file.c	17 Sep 2006 10:56:15
> -0000	1.91.2.1 +++ sys/compat/linux/linux_file.c	7 Nov 2006
> 15:52:21 -0000 @@ -92,6 +92,7 @@ linux_open(struct thread *td,
> struct lin struct proc *p = td->td_proc;
>      char *path;
>      int bsd_flags, error;
> +    struct stat sb;
>
>      if (args->flags & LINUX_O_CREAT)
>  	LCONVPATHCREAT(td, args->path, &path);
> @@ -129,6 +130,11 @@ linux_open(struct thread *td, struct lin
>      if (args->flags & LINUX_O_NOCTTY)
>  	bsd_flags |= O_NOCTTY;
>
> +    /* linux opens RDWR fifos in a nonblocking manner */
> +    error = kern_stat(td, path, UIO_USERSPACE, &sb);
> +    if (S_ISFIFO(sb.st_mode) && (bsd_flags & O_RDWR))
> +	bsd_flags |= O_NONBLOCK;
> +
>      error = kern_open(td, path, UIO_SYSSPACE, bsd_flags,
> args->mode); PROC_LOCK(p);
>      if (!error && !(bsd_flags & O_NOCTTY) &&
>
>
> Anyway, after patching RELENG_6 (today's source) with the above
> patch, I tested it with:
>
> - run linux-seamonkey
> - ctrl-p to bring up print dialog box
> - check 'Print to File'
> - click the Print button
> - observe hang
>
> '/bin/ps -o wchan,command | grep seam' shows one process in the
> fifoor state.
>
> It is killable with ctrl-c.
>
> I am using linux_base-fc-4_9.

Try the attached patch instead.

Jung-uk Kim
-------------- next part --------------
A non-text attachment was scrubbed...
Name: linux_stats.diff
Type: text/x-diff
Size: 388 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-emulation/attachments/20061107/f438890a/linux_stats.bin


More information about the freebsd-emulation mailing list