Date: Mon, 23 Jun 1997 20:14:52 +0900 From: pine@math.okayama-u.ac.jp To: FreeBSD-gnats-submit@FreeBSD.ORG Subject: kern/3938: Problem about mmap() over NFS Message-ID: <199706231114.UAA17960@decpc5.math.okayama-u.ac.jp> Resent-Message-ID: <199706231110.EAA28143@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 3938 >Category: kern >Synopsis: Problem about mmap() over NFS >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Jun 23 04:10:00 PDT 1997 >Last-Modified: >Originator: Hiroaki Komatsu >Organization: Okayama University >Release: FreeBSD 2.1-STABLE i386 >Environment: NFS server: SPARC station 20 running SunOS 4.1.3 NFS client: FreeBSD 2.2.2-RELEASE FreeBSD 2.2.1-RELEASE FreeBSD 2.1.0-RELEASE >Description: An ftp command `get foo' between different NFS clients for a remote file `foo' of NFS causes ftpd to be frozen. >How-To-Repeat: I think that the following program causes the same trouble, when an argument is a remote file of NFS, say `foo'. While the program is sleeping 10 seconds, if another machine executes `echo >foo' then write() call can not return. ------------------------------------------------------------ #include <stdio.h> #include <sys/mman.h> main(int argc, char *argv[]) { FILE *fin; char *buf; if (argc != 2 || (fin = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "Usage: %s file\n", argv[0]); exit(1); } fprintf(stderr, "sleep 10 seconds ...\n"); sleep(10); buf = mmap(0, 1, PROT_READ, MAP_SHARED, fileno(fin), 0); if ((int)buf == -1) { fprintf(stderr, "? mmap\n"); exit(1); } write(1, buf, 1); } >Fix: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199706231114.UAA17960>