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