Messages in this thread | | | Date | Sat, 12 Sep 2015 01:28:27 +0100 | From | Pádraig Brady <> | Subject | query re unlink() ... inotify ... open() race |
| |
Hi,
We're noticing a rare race here with open() in tail(1), where this happens:
tail --follow=name "file" /* "file" is unlinked() by another process */ read(IN_ATTRIB from inotify); /* for st_nlink-- */ open("file") /* Done to check if deleted, but this succeeds! */
The open() succeeding is surprising. Is that allowed? The summary of the sequence in the kernel is:
vfs_unlink() { mutex_lock(&(dentry->d_inode->i_mutex)); security_inode_unlink(dir, dentry); try_break_deleg(target, delegated_inode); dir->i_op->unlink(dir, dentry); dont_mount(dentry); detach_mounts(dentry); mutex_unlock(&(dentry->d_inode->i_mutex));
fsnotify_link_count(target) d_delete(dentry); }
thanks, Pádraig.
| |