commit 84f0f75de1046edef2d7f859f2ff09285b483bc8 from: Jonathan Rudenberg via: Jeff Lindsay date: Wed Jun 21 00:56:40 2017 UTC ufs: Fix deadlock in Create Ensure that we don't attempt to lock the FileRef twice, which causes a deadlock. Signed-off-by: Jonathan Rudenberg commit - b1b8898e7cb788d8274eb8d4c9cca1fe380f505a commit + 84f0f75de1046edef2d7f859f2ff09285b483bc8 blob - ee80835ab698df40062bc48c3def67269779c739 blob + 143cad902fed1b41ba8d96d840ddde3d2092887d --- ufs/fileref.go +++ ufs/fileref.go @@ -18,7 +18,10 @@ type FileRef struct { func (f *FileRef) Stat() error { f.Lock() defer f.Unlock() + return f.statLocked() +} +func (f *FileRef) statLocked() error { info, err := os.Lstat(f.Path) if err != nil { return err blob - ecab9cec2a80493fdd9c4cb4ce0c25c008f2eda2 blob + 47220dc5c356829f11227b71bb7b65d11f01a380 --- ufs/session.go +++ ufs/session.go @@ -260,7 +260,7 @@ func (sess *session) Create(ctx context.Context, paren defer ref.Unlock() ref.Path = newpath ref.File = file - if err := ref.Stat(); err != nil { + if err := ref.statLocked(); err != nil { return p9p.Qid{}, 0, err } return ref.Info.Qid, 0, err