blob: c3cf84bb7f6b88c531f809fa612fdbd508a03fae [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.fs.startup;
using fuchsia.fxfs;
using fuchsia.hardware.block;
using fuchsia.io;
using zx;
/// Compression algorithm specifier.
type CompressionAlgorithm = flexible enum {
ZSTD_CHUNKED = 0;
UNCOMPRESSED = 1;
};
/// An optional eviction policy override for pager-backed blobs for blobfs.
type EvictionPolicyOverride = flexible enum {
/// Don't override the default cache policy.
NONE = 0;
/// Override the default cache policy for pager-backed blobs with kNeverEvict.
NEVER_EVICT = 1;
/// Override the default cache policy for pager-backed blobs with kEvictImmediately.
EVICT_IMMEDIATELY = 2;
};
/// Options for starting a filesystem.
type StartOptions = resource struct {
/// Start the filesystem in read-only mode.
read_only bool = false;
/// Enable verbose logging.
verbose bool = false;
/// If true, decompression is run in a sandbox component (if the filesystem supports it).
sandbox_decompression bool = false;
/// A compression algorithm specifier for the filesystem to use when storing files (if the
/// filesystem supports it). Defaults to ZSTD_CHUNKED.
write_compression_algorithm CompressionAlgorithm;
/// An optional compression level for the filesystem to use when storing files (if the
/// filesystem and the configured |write_compression_algorithm| supports it). Setting to < 0
/// indicates no value (the filesystem chooses a default if necessary).
write_compression_level int32 = -1;
/// An optional eviction policy specifier for the filesystem to use for in-memory structures
/// (if the filesystem supports it), specifically for pager-backed files.
cache_eviction_policy_override EvictionPolicyOverride;
/// An optional connection to a crypt client (for encrypted filesystems).
crypt client_end:<fuchsia.fxfs.Crypt, optional>;
// If set, provides the caller with the opportunity to migrate data before the mount is
// finalised. The mount will be blocked until the channel is closed.
migrate_root server_end:<fuchsia.io.Directory, optional>;
};
/// Options for how to format filesystems.
type FormatOptions = resource struct {
/// Enable verbose logging.
verbose bool = false;
/// If true, use the deprecated padded merkle tree blobfs format.
deprecated_padded_blobfs_format bool = false;
/// The initial number of inodes to allocate space for. If zero, a default is used. Only
/// supported for blobfs.
num_inodes uint64 = 0;
/// An optional connection to a crypt client (for encrypted filesystems).
crypt client_end:<fuchsia.fxfs.Crypt, optional>;
};
/// Options for running consistency checks on filesystems.
type CheckOptions = resource struct {
/// An optional connection to a crypt client (for encrypted filesystems).
crypt client_end:<fuchsia.fxfs.Crypt, optional>;
};
// TODO(fxbug.dev/90702): Figure out a more flexible configuration option strategy.
@discoverable
protocol Startup {
/// Start this filesystem, using the provided block device and Start options. When start is
/// called, the filesystem will populate it's outgoing directory and then return.
Start(resource struct {
device client_end:fuchsia.hardware.block.Block;
options StartOptions;
}) -> (struct {}) error zx.status;
/// Format the provided block device with this filesystem.
Format(resource struct {
device client_end:fuchsia.hardware.block.Block;
options FormatOptions;
}) -> (struct {}) error zx.status;
/// Check the provided block device for filesystem consistency.
Check(resource struct {
device client_end:fuchsia.hardware.block.Block;
options CheckOptions;
}) -> (struct {}) error zx.status;
};