Re: [FIX] Make deadlock detection work for file locking

From: Stephen Rothwell (sfr@linuxcare.com.au)
Date: Mon Aug 21 2000 - 19:45:27 EST


Hi,

Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de> writes:
>
> Mostly curious: What kind of problems did you have with deadlock
> detection? AFAICS your patch looks ok, but deadlock detections seems
> to be functionally equivilent with or without the patch.

Well, actually the following program just hangs on 2.4.0-test7pre4
and reports EDEADLOCK after the patch is applied.

Cheers,
Stephen

-- 
Stephen Rothwell, Open Source Researcher, Linuxcare, Inc.
+61-2-62628990 tel, +61-2-62628991 fax 
sfr@linuxcare.com, http://www.linuxcare.com/ 
Linuxcare. Support for the revolution.

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h>

int main(int argc, char **argv) { struct flock fl; int fd; unsigned char c; int pipe_fd[2];

if (pipe(pipe_fd) == -1) { perror("pipe"); return 1; } switch (fork()) { case -1: perror("fork"); return 1; case 0: if (read(pipe_fd[0], &c, 1) == -1) { perror("read pipe child"); return 1; } fd = open("deadlock.testfile", O_RDWR); if (fd == -1) { perror("open child"); return 1; } fl.l_type = F_WRLCK; fl.l_whence = 0; fl.l_start = 20; fl.l_len = 10; if (fcntl(fd, F_SETLK, &fl) == -1) { perror("fcntl child 1"); return 1; } fl.l_type = F_WRLCK; fl.l_whence = 0; fl.l_start = 10; fl.l_len = 10; if (fcntl(fd, F_SETLKW, &fl) == -1) { perror("fcntl child 2"); return 1; } break; default: fd = open("deadlock.testfile", O_RDWR|O_CREAT, 0600); if (fd == -1) { perror("open parent 1"); return 1; } fl.l_type = F_WRLCK; fl.l_whence = 0; fl.l_start = 10; fl.l_len = 10; if (fcntl(fd, F_SETLK, &fl) == -1) { perror("fcntl parent 1"); return 1; } if (write(pipe_fd[1], "x", 1) == -1) { perror("write pipe parent 1"); return 1; } sleep(5); fl.l_type = F_WRLCK; fl.l_whence = 0; fl.l_start = 20; fl.l_len = 10; if (fcntl(fd, F_SETLKW, &fl) == -1) { perror("fcntl parent 2"); return 1; } break; } return 0; } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed Aug 23 2000 - 21:00:06 EST