#define FS_EVENT_FIELD_FILE "lib-fs#file"
#define FS_EVENT_FIELD_ITER "lib-fs#iter"
+enum fs_get_metadata_flags {
+ FS_GET_METADATA_FLAG_DUMMY,
+};
+
struct fs_api_module_register {
unsigned int id;
};
void (*set_metadata)(struct fs_file *file, const char *key,
const char *value);
int (*get_metadata)(struct fs_file *file,
+ enum fs_get_metadata_flags flags,
const ARRAY_TYPE(fs_metadata) **metadata_r);
bool (*prefetch)(struct fs_file *file, uoff_t length);
void fs_metadata_init_or_clear(struct fs_file *file);
void fs_default_set_metadata(struct fs_file *file,
const char *key, const char *value);
+int fs_get_metadata_full(struct fs_file *file,
+ enum fs_get_metadata_flags flags,
+ const ARRAY_TYPE(fs_metadata) **metadata_r);
const char *fs_metadata_find(const ARRAY_TYPE(fs_metadata) *metadata,
const char *key);
int fs_default_copy(struct fs_file *src, struct fs_file *dest);
file->timing_start[op].tv_sec = 0;
}
-int fs_get_metadata(struct fs_file *file,
- const ARRAY_TYPE(fs_metadata) **metadata_r)
+int fs_get_metadata_full(struct fs_file *file,
+ enum fs_get_metadata_flags flags,
+ const ARRAY_TYPE(fs_metadata) **metadata_r)
{
int ret;
fs_file_timing_start(file, FS_OP_METADATA);
}
T_BEGIN {
- ret = file->fs->v.get_metadata(file, metadata_r);
+ ret = file->fs->v.get_metadata(file, flags, metadata_r);
} T_END;
if (!(ret < 0 && errno == EAGAIN))
fs_file_timing_end(file, FS_OP_METADATA);
return ret;
}
+int fs_get_metadata(struct fs_file *file,
+ const ARRAY_TYPE(fs_metadata) **metadata_r)
+{
+ return fs_get_metadata_full(file, 0, metadata_r);
+}
+
int fs_lookup_metadata(struct fs_file *file, const char *key,
const char **value_r)
{
static int
fs_metawrap_get_metadata(struct fs_file *_file,
+ enum fs_get_metadata_flags flags,
const ARRAY_TYPE(fs_metadata) **metadata_r)
{
struct metawrap_fs_file *file = (struct metawrap_fs_file *)_file;
char c;
if (!file->fs->wrap_metadata)
- return fs_get_metadata(_file->parent, metadata_r);
+ return fs_get_metadata_full(_file->parent, flags, metadata_r);
if (file->metadata_read) {
/* we have the metadata */
static int
fs_randomfail_get_metadata(struct fs_file *_file,
+ enum fs_get_metadata_flags flags,
const ARRAY_TYPE(fs_metadata) **metadata_r)
{
struct randomfail_fs_file *file = (struct randomfail_fs_file *)_file;
if (fs_file_random_fail_begin(file, FS_OP_METADATA))
return -1;
- ret = fs_get_metadata(_file->parent, metadata_r);
+ ret = fs_get_metadata_full(_file->parent, flags, metadata_r);
return fs_file_random_fail_end(file, ret, FS_OP_METADATA);
}
static int
fs_test_get_metadata(struct fs_file *_file,
+ enum fs_get_metadata_flags flags ATTR_UNUSED,
const ARRAY_TYPE(fs_metadata) **metadata_r)
{
struct test_fs_file *file = (struct test_fs_file *)_file;
}
int fs_wrapper_get_metadata(struct fs_file *file,
+ enum fs_get_metadata_flags flags,
const ARRAY_TYPE(fs_metadata) **metadata_r)
{
- return fs_get_metadata(file->parent, metadata_r);
+ return fs_get_metadata_full(file->parent, flags, metadata_r);
}
bool fs_wrapper_prefetch(struct fs_file *file, uoff_t length)
#ifndef FS_WRAPPER_H
#define FS_WRAPPER_H
+enum fs_get_metadata_flags;
+
enum fs_properties fs_wrapper_get_properties(struct fs *fs);
void fs_wrapper_file_close(struct fs_file *file);
const char *fs_wrapper_file_get_path(struct fs_file *file);
void fs_wrapper_set_metadata(struct fs_file *file, const char *key,
const char *value);
int fs_wrapper_get_metadata(struct fs_file *file,
+ enum fs_get_metadata_flags flags,
const ARRAY_TYPE(fs_metadata) **metadata_r);
bool fs_wrapper_prefetch(struct fs_file *file, uoff_t length);
ssize_t fs_wrapper_read(struct fs_file *file, void *buf, size_t size);