Add support for max_pages and increase to 256 (#96)
* Bump protocol version to min 7.28, max 7.31 * Increase read/write buffer size to 1MiB * Add new fields to initOp * Set FUSE_MAX_PAGES flag for init * Lower min minor version to 19 for osxfuse * Fix linux WriteSize testgeesefs-0-30-9
parent
0630024b2b
commit
d82237972e
|
@ -161,6 +161,9 @@ func (c *Connection) Init() error {
|
|||
|
||||
// Tell the kernel not to use pitifully small 4 KiB writes.
|
||||
initOp.Flags |= fusekernel.InitBigWrites
|
||||
// kernel 4.20 increases the max from 32 -> 256
|
||||
initOp.Flags |= fusekernel.InitMaxPages
|
||||
initOp.MaxPages = 256
|
||||
|
||||
// Enable writeback caching if the user hasn't asked us not to.
|
||||
if !c.cfg.DisableWritebackCaching {
|
||||
|
|
|
@ -796,7 +796,12 @@ func (c *Connection) kernelResponseForOp(
|
|||
out.Minor = o.Library.Minor
|
||||
out.MaxReadahead = o.MaxReadahead
|
||||
out.Flags = uint32(o.Flags)
|
||||
// Default values
|
||||
out.MaxBackground = 12
|
||||
out.CongestionThreshold = 9
|
||||
out.MaxWrite = o.MaxWrite
|
||||
out.TimeGran = 1
|
||||
out.MaxPages = o.MaxPages
|
||||
|
||||
default:
|
||||
panic(fmt.Sprintf("Unexpected op: %#v", op))
|
||||
|
|
|
@ -16,6 +16,5 @@ package buffer
|
|||
|
||||
// The maximum fuse write request size that InMessage can acommodate.
|
||||
//
|
||||
// Experimentally, Linux appears to refuse to honor a MaxWrite setting in an
|
||||
// INIT response of more than 128 KiB.
|
||||
const MaxWriteSize = 1 << 17
|
||||
// As of kernel 4.20 Linux accepts writes up to 256 pages or 1MiB
|
||||
const MaxWriteSize = 1 << 20
|
||||
|
|
|
@ -17,5 +17,5 @@ package buffer
|
|||
// The maximum read size that we expect to ever see from the kernel, used for
|
||||
// calculating the size of out messages.
|
||||
//
|
||||
// For 4 KiB pages, this is 128 KiB (cf. https://goo.gl/HOiEYo)
|
||||
const MaxReadSize = 1 << 17
|
||||
// For 4 KiB pages, this is 1024 KiB (cf. https://github.com/torvalds/linux/blob/15db16837a35d8007cb8563358787412213db25e/fs/fuse/fuse_i.h#L38-L40)
|
||||
const MaxReadSize = 1 << 20
|
||||
|
|
|
@ -44,9 +44,9 @@ import (
|
|||
// The FUSE version implemented by the package.
|
||||
const (
|
||||
ProtoVersionMinMajor = 7
|
||||
ProtoVersionMinMinor = 8
|
||||
ProtoVersionMinMinor = 19
|
||||
ProtoVersionMaxMajor = 7
|
||||
ProtoVersionMaxMinor = 12
|
||||
ProtoVersionMaxMinor = 31
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -266,6 +266,7 @@ const (
|
|||
InitAsyncDIO InitFlags = 1 << 15
|
||||
InitWritebackCache InitFlags = 1 << 16
|
||||
InitNoOpenSupport InitFlags = 1 << 17
|
||||
InitMaxPages InitFlags = 1 << 22
|
||||
InitCacheSymlinks InitFlags = 1 << 23
|
||||
InitNoOpendirSupport InitFlags = 1 << 24
|
||||
|
||||
|
@ -286,6 +287,7 @@ var initFlagNames = []flagName{
|
|||
{uint32(InitAtomicTrunc), "InitAtomicTrunc"},
|
||||
{uint32(InitExportSupport), "InitExportSupport"},
|
||||
{uint32(InitBigWrites), "InitBigWrites"},
|
||||
{uint32(InitMaxPages), "InitMaxPages"},
|
||||
{uint32(InitDontMask), "InitDontMask"},
|
||||
{uint32(InitSpliceWrite), "InitSpliceWrite"},
|
||||
{uint32(InitSpliceMove), "InitSpliceMove"},
|
||||
|
@ -718,8 +720,13 @@ type InitOut struct {
|
|||
Minor uint32
|
||||
MaxReadahead uint32
|
||||
Flags uint32
|
||||
Unused uint32
|
||||
MaxBackground uint16
|
||||
CongestionThreshold uint16
|
||||
MaxWrite uint32
|
||||
TimeGran uint32
|
||||
MaxPages uint16
|
||||
MapAlignment uint16
|
||||
Unused [8]uint32
|
||||
}
|
||||
|
||||
type InterruptIn struct {
|
||||
|
|
2
ops.go
2
ops.go
|
@ -42,5 +42,7 @@ type initOp struct {
|
|||
// Out
|
||||
Library fusekernel.Protocol
|
||||
MaxReadahead uint32
|
||||
MaxBackground uint16
|
||||
MaxWrite uint32
|
||||
MaxPages uint16
|
||||
}
|
||||
|
|
|
@ -194,7 +194,7 @@ func (t *StatFSTest) WriteSize() {
|
|||
// small chunks of data.
|
||||
switch runtime.GOOS {
|
||||
case "linux":
|
||||
ExpectEq(1<<17, t.fs.MostRecentWriteSize())
|
||||
ExpectEq(1<<20, t.fs.MostRecentWriteSize())
|
||||
|
||||
case "darwin":
|
||||
ExpectEq(1<<20, t.fs.MostRecentWriteSize())
|
||||
|
|
Loading…
Reference in New Issue