jacobsa/fuse

panic: convertInMessage: Can't grow for 262144-byte read

kungf opened this issue · 6 comments

kungf commented

panic: convertInMessage: Can't grow for 262144-byte read

goroutine 132 [running]:
gitlab.infrasre.qihoo.net/polefs/fuse/fuseutil.(*fileSystemServer).ServeOps(0xc00085bef0, 0xc00085fe10)
/home/wangyang5/go/pkg/mod/gitlab.infrasre.qihoo.net/polefs/fuse@v1.0.0-0/fuseutil/file_system.go:113 +0x289
gitlab.infrasre.qihoo.net/polefs/fuse.Mount.func1(0xea1500, 0xc00085bef0, 0xc00085fe10, 0xc00085bf50)
/home/wangyang5/go/pkg/mod/gitlab.infrasre.qihoo.net/polefs/fuse@v1.0.0-0/mount.go:84 +0x3f
created by gitlab.infrasre.qihoo.net/polefs/fuse.Mount
/home/wangyang5/go/pkg/mod/gitlab.infrasre.qihoo.net/polefs/fuse@v1.0.0-0/mount.go:83 +0x4fe

kungf commented

hi, @stapelberg have you encounterd this panic error?

I have not seen this before. It seems like the kernel is sending you more data than the FUSE library ever expects to get.

MaxReadSize is 128K as per

const MaxReadSize = 1 << 17

Not sure why you’re seeing 256K. Have you changed some parts of the code?

kungf commented

Have you changed some parts of the code?

No. Not find something useful clue yet!

kungf commented

someone change the fuse.ko, and modify the FUSE_MAX_PAGES_PER_REQ casuse this issue.

someone change the fuse.ko, and modify the FUSE_MAX_PAGES_PER_REQ casuse this issue.

Thanks for letting us know. To be clear, are you saying that the code was changed (incorrectly), or are you saying that only the kernel side was changed and that triggered an issue in the code?

If the latter, we should fix that. The fuse library and kernel are supposed to negotiate what they support.

kungf commented

are you saying that only the kernel side was changed and that triggered an issue in the code

yes, the FUSE_MAX_PAGES_PER_REQ in kernel/fs/fuse/fuse_i.h was changed from 32 to 64, so trigger this issue!

If the latter, we should fix that. The fuse library and kernel are supposed to negotiate what they support.

i think so, the out message size may allocated according the size from kernel message, not always
MaxReadSize