diff --git a/vfs/dir.go b/vfs/dir.go index 0d24195bd..243f0d321 100644 --- a/vfs/dir.go +++ b/vfs/dir.go @@ -845,7 +845,7 @@ func (d *Dir) statMetadata(leaf, baseLeaf string) (metaNode Node, err error) { } // Make a memory based file with metadataDump in remote := path.Join(d.path, leaf) - o := object.NewMemoryObject(remote, entry.ModTime(d.vfs.ctx), metadataDump) + o := object.NewMemoryObject(remote, node.ModTime(), metadataDump) f := newFile(d, d.path, o, leaf) // Base the metadata inode number off the real file inode number // to keep it constant diff --git a/vfs/dir_test.go b/vfs/dir_test.go index 3d7ab8cee..559849503 100644 --- a/vfs/dir_test.go +++ b/vfs/dir_test.go @@ -762,4 +762,16 @@ func TestDirMetadataExtension(t *testing.T) { if features.ReadDirMetadata { assert.Equal(t, modTime.Format(time.RFC3339Nano), metadata["mtime"]) } + + // Check metadata for a file being written, which has no object + // yet, exists and is empty + fd, err := vfs.OpenFile("dir/newfile", os.O_WRONLY|os.O_CREATE, 0666) + require.NoError(t, err) + node, err = vfs.Stat("dir/newfile.metadata") + require.NoError(t, err) + require.True(t, node.IsFile()) + blob, err = vfs.ReadFile("dir/newfile.metadata") + require.NoError(t, err) + assert.Equal(t, "{}", string(blob)) + require.NoError(t, fd.Close()) }