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