aboutsummaryrefslogtreecommitdiff
path: root/weed/filesys/dir_link.go
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2021-03-09 23:08:38 -0800
committerChris Lu <chris.lu@gmail.com>2021-03-09 23:08:38 -0800
commit5ba4b479f8955cd6e8cb3235753d54948a8cacf2 (patch)
treee3072e432087f77f378c5ba312ebbc9d14c3b7bd /weed/filesys/dir_link.go
parentbf5b795717f4bca3887e0826d4f5551b1499d79d (diff)
downloadseaweedfs-5ba4b479f8955cd6e8cb3235753d54948a8cacf2.tar.xz
seaweedfs-5ba4b479f8955cd6e8cb3235753d54948a8cacf2.zip
properly lock file.entry object
fix https://github.com/chrislusf/seaweedfs/issues/1882
Diffstat (limited to 'weed/filesys/dir_link.go')
-rw-r--r--weed/filesys/dir_link.go25
1 files changed, 15 insertions, 10 deletions
diff --git a/weed/filesys/dir_link.go b/weed/filesys/dir_link.go
index 29391faeb..606e52fcb 100644
--- a/weed/filesys/dir_link.go
+++ b/weed/filesys/dir_link.go
@@ -35,15 +35,20 @@ func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (f
return nil, err
}
+ oldEntry := oldFile.getEntry()
+ if oldEntry == nil {
+ return nil, fuse.EIO
+ }
+
// update old file to hardlink mode
- if len(oldFile.entry.HardLinkId) == 0 {
- oldFile.entry.HardLinkId = append(util.RandomBytes(16), HARD_LINK_MARKER)
- oldFile.entry.HardLinkCounter = 1
+ if len(oldEntry.HardLinkId) == 0 {
+ oldEntry.HardLinkId = append(util.RandomBytes(16), HARD_LINK_MARKER)
+ oldEntry.HardLinkCounter = 1
}
- oldFile.entry.HardLinkCounter++
+ oldEntry.HardLinkCounter++
updateOldEntryRequest := &filer_pb.UpdateEntryRequest{
Directory: oldFile.dir.FullPath(),
- Entry: oldFile.entry,
+ Entry: oldEntry,
Signatures: []int32{dir.wfs.signature},
}
@@ -53,11 +58,11 @@ func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (f
Entry: &filer_pb.Entry{
Name: req.NewName,
IsDirectory: false,
- Attributes: oldFile.entry.Attributes,
- Chunks: oldFile.entry.Chunks,
- Extended: oldFile.entry.Extended,
- HardLinkId: oldFile.entry.HardLinkId,
- HardLinkCounter: oldFile.entry.HardLinkCounter,
+ Attributes: oldEntry.Attributes,
+ Chunks: oldEntry.Chunks,
+ Extended: oldEntry.Extended,
+ HardLinkId: oldEntry.HardLinkId,
+ HardLinkCounter: oldEntry.HardLinkCounter,
},
Signatures: []int32{dir.wfs.signature},
}