Problem is that new sys_rt_sigsuspend in kernel/signal.c in 2.6.16-rc2+ does not return EINTR. System: Ubuntu i386 breezy badger. Arch: i386 Kernel version: 2.6.16-rc5, gcc 3.3 This break the removable media handling of nautilus on Ubuntu Breezy Badger, Gnome 2.12, Drives mount, but mount status tracking in GNOME is broken, and they are not shown as mounted. What is going on is that rt_sigsuspend() gets called as part of the external call to pmount-hal to mount the device. The reads of the FIFOs and sockets between hald and Nautilus get are not retried as rt_sigsuspend(2) does not return EINTR. Here is the strace output for 2.6.16-rc5 for nautilus when trying to mount a drive (problem happening): read(3, "\1\2m$\0\0\0\0]\0 \1\4\0\0\0\0\0\0\0$\344\1\0000\375\246"..., 32) = 32 access("/usr/bin/pmount-hal", X_OK) = 0 getuid32() = 1000 rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0 write(20, "`\230\217@\0\0\0\0\0\0\0\0\362\372i@\370}W\10\0\0\0\200"..., 148) = 148 rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0 rt_sigsuspend([]) = ? ERESTARTNOHAND (To be restarted) --- SIGRTMIN (Unknown signal 32) @ 0 (0) --- sigreturn() = ? (mask now [RTMIN]) gettimeofday({1141503088, 150962}, NULL) = 0 poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN, revents=POLLIN}, {fd=8, events=POLLIN|POLLPRI}, {fd=10, events=POLLIN|POLLPRI}, {fd=14, events=POLLIN}], 5, 0) = 1 Comparitive strace output under kernel 2.6.15.4: poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}, {fd=8, events=POLLIN|POLLPRI}, {fd=10, events=POLLIN|POLLPRI}, {fd=14, events=POLLIN}], 5, 0) = 0 gettimeofday({1141488494, 765282}, NULL) = 0 access("/usr/bin/pmount-hal", X_OK) = 0 getuid32() = 1000 rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0 write(20, "`\230\217@\0\0\0\0\0\0\0\0\362\372i@@\2U\10\0\0\0\200\0"..., 148) = 148 rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0 rt_sigsuspend([] <unfinished ...> --- SIGRTMIN (Unknown signal 32) @ 0 (0) --- <... rt_sigsuspend resumed> ) = -1 EINTR (Interrupted system call) sigreturn() = ? (mask now [RTMIN]) gettimeofday({1141488494, 778060}, NULL) = 0 poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}, {fd=8, events=POLLIN|POLLPRI}, {fd=10, events=POLLIN|POLLPRI}, {fd=14, events=POLLIN}], 5, 0) = 0 write(3, "*\2\3\0]\0 \1\344r\2\0+\0\1\0\22\0\7\0\\\0 \1\2\1\0\0\6"..., 44) = 44 ioctl(3, FIONREAD, [160]) = I think David woodhouse may be responsible for this.... Regards, Matthew Grant -- Matthew Grant <[email protected]> Matthew's UNIX Box
Attachment:
signature.asc
Description: This is a digitally signed message part
- Follow-Ups:
- Re: PROBLEM: rt_sigsuspend() does not return EINTR on 2.6.16-rc2+
- From: David Woodhouse <[email protected]>
- Re: PROBLEM: rt_sigsuspend() does not return EINTR on 2.6.16-rc2+
- Prev by Date: Re: [PATCH] fix potential jiffies overflow
- Next by Date: Re: [PATCH 0/8] Intel I/O Acceleration Technology (I/OAT)
- Previous by thread: [PATCH] sunrpc svc: be quieter
- Next by thread: Re: PROBLEM: rt_sigsuspend() does not return EINTR on 2.6.16-rc2+
- Index(es):