Messages in this thread | | | Date | Sun, 03 Jul 2005 00:38:11 +0100 | From | Daniel Drake <> | Subject | Re: Problem with inotify |
| |
Hi Anton,
Anton Altaparmakov wrote: > Thinking about it some more made me realize that there may be a problem in > inotify after all... Could you try the below patch to fs/inotify.c and > tell me if it cures the lockup you are seeing? (Note patch compiles but > is otherwise untested. But given it locks up without the patch it can't > do much worse with it!)
Thanks for writing that patch, the effort is much appreciated. Unfortunately it does not help :(
I've done a bit more investigating for you though. I did some tests purely on the console, using inotify-test (from inotify-utils) which is the most simplistic way you can use inotify: it just prints out the recieved events to the screen.
I found out that unmount works perfectly well as long as there are no active inotify watches (this might be quite obvious though!) - i.e. closing inotify-test before unmounting results in a clean unmount. Unmounting while inotify-test is watching the NTFS partition causes the freeze.
When the machine freezes, it still responds to ping, but not to ssh. Sysrq works, so I got a sysrq-p trace:
Pid 8997 comm umount EIP is at inotify_unmount_inodes+0x38/0x140
stack trace: invalidate_inodes+0x40/0x90 generic_shutdown_super+0x59/0x140 kill_block_super+0x2d/0x50 deactivate_super+0x5a/0x90 sys_umount+0x3f/0x90 filp_close+0x52/0xa0 sys_oldumount+0x17/0x20 sysenter_past_esp+0x54/0x75
Investigating that function:
(gdb) list *inotify_unmount_inodes+0x38 0x9c8 is in inotify_unmount_inodes (inotify.c:565). 560 */ 561 void inotify_unmount_inodes(struct list_head *list) 562 { 563 struct inode *inode, *next_i, *need_iput = NULL; 564 565 list_for_each_entry_safe(inode, next_i, list, i_sb_list) { 566 struct inode *need_iput_tmp; 567 struct inotify_watch *watch, *next_w; 568 struct list_head *watches; 569
I then added a loop counter printk in at line 569 above. It shows that the loop iterates 8 times on a clean unmount, and goes into a seemingly infinite loop (i.e. freeze) when unmounting with inotify watches active.
I don't know much about filesystem internals so I'm pretty stuck here, haven't reached that chapter of Robert's book yet ;)
Please let me know if theres any other info I can provide.
Thanks, Daniel - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |