From 00a0ee189959bf71913981482119f4836d25b632 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Mon, 26 Apr 2021 14:16:12 +0100 Subject: [PATCH] vfs: fix modtime changing when reading file into cache - fixes #5277 Before this change but after: aea8776a4368ee8a vfs: fix modtimes not updating when writing via cache #4763 When a file was opened read-only the modtime was read from the cached file. However this modtime wasn't correct leading to an incorrect result. This change fixes the definition of `item.IsDirty` to be true only when the data is dirty. This fixes the problem as a read only file isn't considered dirty. --- vfs/vfscache/cache.go | 2 +- vfs/vfscache/item.go | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/vfs/vfscache/cache.go b/vfs/vfscache/cache.go index 3a3cf2bc6..7427e9d0e 100644 --- a/vfs/vfscache/cache.go +++ b/vfs/vfscache/cache.go @@ -549,7 +549,7 @@ func (c *Cache) purgeClean(quota int64) { // Make a slice of clean cache files for _, item := range c.item { - if !item.IsDataDirty() { + if !item.IsDirty() { items = append(items, item) } } diff --git a/vfs/vfscache/item.go b/vfs/vfscache/item.go index 7c42563c8..1d07c57ff 100644 --- a/vfs/vfscache/item.go +++ b/vfs/vfscache/item.go @@ -450,15 +450,8 @@ func (item *Item) Dirty() { item.mu.Unlock() } -// IsDirty returns true if the item is dirty +// IsDirty returns true if the item data is dirty func (item *Item) IsDirty() bool { - item.mu.Lock() - defer item.mu.Unlock() - return item.metaDirty || item.info.Dirty -} - -// IsDataDirty returns true if the item's data is dirty -func (item *Item) IsDataDirty() bool { item.mu.Lock() defer item.mu.Unlock() return item.info.Dirty