hi, > 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.
do you mean that writably-opened files are not affected? YAMAMOTO Takashi > > 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