Please consider the test case below, ran on a PUFFS/perfuse/glusterfs mount. A look at the PUFFS operation trace shows that the kernel sends ADVLOCK for f0, f1 and m when a lock is requested on m.
It only happens if f0 and f1 are open read-only. As I understand, a lock requested on a file cause all files open read-only to be locked too. I have not yet investigated what happens in libpuffs and in the kernel, but the question is: does that make any sense? Is it somewhat a known behavior? #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <err.h> #include <sysexits.h> #include <sys/param.h> int main(void) { int fd, i, fi; struct flock fl; char fpath[MAXPATHLEN + 1]; for (i = 0; i < 2; i++) { (void)sprintf(fpath, "f%d", i); if (access(fpath, F_OK) == -1) { if ((fi = open(fpath, O_CREAT, 0644)) == -1) err(EX_OSERR, "open failed"); if (close(fi) != 0) err(EX_OSERR, "close failed"); } if ((fi = open(fpath, O_RDONLY, 0644)) == -1) err(EX_OSERR, "open failed"); } if ((fd = open("m", O_CREAT|O_WRONLY|O_APPEND, 0)) == -1) err(EX_OSERR, "open failed"); fl.l_start = 0; fl.l_len = 0; fl.l_whence = SEEK_SET; fl.l_type = F_WRLCK; if (fcntl(fd, F_SETLKW, &fl) == -1) err(EX_OSERR, "fcntl failed"); return 0; } -- Emmanuel Dreyfus http://hcpnet.free.fr/pubz m...@netbsd.org