Hold d.parent.mu when reading d.name

PiperOrigin-RevId: 203041657
Change-Id: I120783d91712818e600505454c9276f8d9877f37
This commit is contained in:
Michael Pratt
2018-07-02 17:39:10 -07:00
committed by Shentubot
parent 126296ce2a
commit 2821dfe6ce
+9 -1
View File
@@ -1342,7 +1342,15 @@ func (d *Dirent) InotifyEvent(events, cookie uint32) {
// The ordering below is important, Linux always notifies the parent first.
if d.parent != nil {
d.parent.Inode.Watches.Notify(d.name, events, cookie)
// name is immediately stale w.r.t. renames (renameMu doesn't
// protect against renames in the same directory). Holding
// d.parent.mu around Notify() wouldn't matter since Notify
// doesn't provide a synchronous mechanism for reading the name
// anyway.
d.parent.mu.Lock()
name := d.name
d.parent.mu.Unlock()
d.parent.Inode.Watches.Notify(name, events, cookie)
}
d.Inode.Watches.Notify("", events, cookie)