tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
PUFFS ADVLOCK is to greedy
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
manu%netbsd.org@localhost
Home |
Main Index |
Thread Index |
Old Index