套印格式向上复制会创建一个空文件



我正在做一件有点奇怪的事情,创建一个overlayfs装载,其中较低的目录是一个FUSE卷(我已经实现了(。这似乎主要起作用,我可以通过overlayfs装载从FUSE装载读取文件,并且它们具有正确的内容。我还可以在overlayfs装载中创建新文件,这并不奇怪,因为当您尝试LOOKUP该文件时,这只需要较低的FUSE层返回ENOENT响应。失败的是,当我试图附加到现有文件时,我没有得到现有内容后面跟着附加的内容,而是只得到附加的内容。我假设我的FUSE卷一定有应该做的事情,但它没有,这导致了这个错误。然而,查看日志并没有抱怨任何未实现的方法,也没有任何错误。以下是相关事件文件("foo"(的日志。

2020/04/15 10:35:42 rx 9: LOOKUP i9223372036854775808 ["foo"] 4b
2020/04/15 10:35:42 tx 9:     OK, {i9223372036854775809 g0 tE=0s tA=0s {M0100644 SZ=0 L=0 0:0 B0*0 i0:9223372036854775809 A 0.000000 M 0.000000 C 0.000000}}
2020/04/15 10:35:42 rx 10: OPEN i9223372036854775809 {O_RDONLY,0x8000}
2020/04/15 10:35:42 tx 10:     OK, {Fh 1 }
2020/04/15 10:35:42 rx 11: GETATTR i9223372036854775809 {Fh 0}
2020/04/15 10:35:42 tx 11:     OK, {tA=0s {M0100600 SZ=4 L=1 0:0 B8*4096 i0:9223372036854775809 A 1586972142.827290 M 1586972142.855292 C 1586972142.855292}}
2020/04/15 10:35:42 rx 12: GETATTR i9223372036854775809 {Fh 1}
2020/04/15 10:35:42 tx 12:     OK, {tA=0s {M0100600 SZ=4 L=1 0:0 B8*4096 i0:9223372036854775809 A 1586972142.827290 M 1586972142.855292 C 1586972142.855292}}
2020/04/15 10:35:42 rx 13: READ i9223372036854775809 {Fh 1 [0 +4096)  L 0 NONBLOCK,0x8000}
2020/04/15 10:35:42 tx 13:     OK,  4096b data (fd data)
2020/04/15 10:35:42 rx 14: GETATTR i9223372036854775809 {Fh 1}
2020/04/15 10:35:42 tx 14:     OK, {tA=0s {M0100600 SZ=4 L=1 0:0 B8*4096 i0:9223372036854775809 A 1586972142.855292 M 1586972142.855292 C 1586972142.855292}}
2020/04/15 10:35:42 rx 15: FLUSH i9223372036854775809 {Fh 1}
2020/04/15 10:35:42 tx 15:     OK
2020/04/15 10:35:42 rx 16: RELEASE i9223372036854775809 {Fh 1 NONBLOCK,0x8000  L0}
2020/04/15 10:35:42 tx 16:     OK
2020/04/15 10:35:42 rx 17: GETATTR i9223372036854775808 {Fh 0}
2020/04/15 10:35:42 tx 17:     OK, {tA=0s {M040755 SZ=0 L=0 0:0 B0*0 i0:9223372036854775808 A 0.000000 M 0.000000 C 0.000000}}
2020/04/15 10:35:42 rx 18: LISTXATTR i9223372036854775808 {sz 0}
2020/04/15 10:35:42 tx 18:     OK
2020/04/15 10:35:42 rx 19: GETATTR i9223372036854775809 {Fh 0}
2020/04/15 10:35:42 tx 19:     OK, {tA=0s {M0100644 SZ=0 L=0 0:0 B0*0 i0:9223372036854775809 A 0.000000 M 0.000000 C 0.000000}}
2020/04/15 10:35:42 rx 20: LISTXATTR i9223372036854775809 {sz 0}
2020/04/15 10:35:42 tx 20:     OK

如果这很重要的话,保险丝层是用go写的。

首先,这个设置并不奇怪。其次,你会有更好的机会得到答案linux-unionfs@vger.kernel.org.

但无论如何,据我所知,问题似乎出在你的保险丝fs:上

2020/04/15 10:35:42 rx 9:LOOKUP i9223372036854775808["foo"]4b2020/04/15 10:35:42 tx 9:OK,{i9223372036854775809 g0 tE=0s tA=0s{M0100644SZ=0L=0 0:0 B0*0 i0:9223372036854775809 A 0.000000 M0.000000 c0.000000}}

2020/04/15 10:35:42 rx 19:GETTR i9223372036854775809{Fh 0}2020/04/15 10:35:42 tx 19:好,{tA=0s{M0100644SZ=0L=0 0:0 B0*0i0:9223372036854775809 A 0.000000 M 0.000000 C 0.000000000}

不确定原因,但您的fs会报告查找时发现的文件的大小为零,而稍后读取文件时,会报告大小正确地为4。

我希望如果你在你的保险丝fs上运行stat(1(或ls-l,你也可以观察这个问题。可能是您正确地实现了fstat(2(,但没有实现lstat(1(?

谢谢,阿米尔。

相关内容

  • 没有找到相关文章

最新更新