blob: 11d6530bc9a6d67587fee87f5f85ddc8a959f49e [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright (c) 2024 Oracle. All Rights Reserved.
* Author: Darrick J. Wong <djwong@kernel.org>
*/
#ifndef __LIBFROG_FSPROPERTIES_H__
#define __LIBFROG_FSPROPERTIES_H__
/* Name space for filesystem properties. */
#define FSPROP_NAMESPACE "trusted."
/*
* All filesystem property xattr names must have this string after the
* namespace. For example, the VFS xattr calls should use the name
* "trusted.xfs:fubar". The xfs xattr ioctls would set ATTR_ROOT and use the
* name "xfs:fubar".
*/
#define FSPROP_NAME_PREFIX "xfs:"
/* Maximum size the value of a filesystem property. */
#define FSPROP_MAX_VALUELEN (65536)
static inline int
fsprop_name_to_attr_name(
const char *prop_name,
char **attr_name)
{
return asprintf(attr_name, FSPROP_NAME_PREFIX "%s", prop_name);
}
static inline const char *
attr_name_to_fsprop_name(
const char *attr_name)
{
const size_t bytes = sizeof(FSPROP_NAME_PREFIX) - 1;
unsigned int i;
for (i = 0; i < bytes; i++) {
if (attr_name[i] == 0)
return NULL;
}
if (memcmp(attr_name, FSPROP_NAME_PREFIX, bytes) != 0)
return NULL;
return attr_name + bytes;
}
bool fsprop_validate(const char *name, const char *value);
/* Specific Filesystem Properties */
#define FSPROP_AUTOFSCK_NAME "autofsck"
enum fsprop_autofsck {
FSPROP_AUTOFSCK_UNSET = 0, /* do not set property */
FSPROP_AUTOFSCK_NONE, /* no background scrubs */
FSPROP_AUTOFSCK_CHECK, /* allow only background checking */
FSPROP_AUTOFSCK_OPTIMIZE, /* allow background optimization */
FSPROP_AUTOFSCK_REPAIR, /* allow background repair & optimization */
};
const char *fsprop_autofsck_write(enum fsprop_autofsck x);
enum fsprop_autofsck fsprop_autofsck_read(const char *value);
#endif /* __LIBFROG_FSPROPERTIES_H__ */