]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-fs: Add flags parameter to fs_vfuncs.get_metadata()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 4 Mar 2020 13:39:28 +0000 (15:39 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 5 Mar 2020 12:18:16 +0000 (14:18 +0200)
src/lib-fs/fs-api-private.h
src/lib-fs/fs-api.c
src/lib-fs/fs-metawrap.c
src/lib-fs/fs-randomfail.c
src/lib-fs/fs-test.c
src/lib-fs/fs-wrapper.c
src/lib-fs/fs-wrapper.h

index 395e3f3ff48321972b03dc129129b4d8bbb36e84..3037d0ee4806d90a419e9cd199ad495cf0b5aa91 100644 (file)
 #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;
 };
@@ -44,6 +48,7 @@ struct fs_vfuncs {
        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);
@@ -181,6 +186,9 @@ void fs_metadata_init(struct fs_file *file);
 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);
index c8bd36d446b2de18fc0b1401f2b5a5668cbb8a73..619c01e041695e8b1659a37e5ccc7a54e82be70a 100644 (file)
@@ -487,8 +487,9 @@ void fs_file_timing_end(struct fs_file *file, enum fs_op op)
        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;
 
@@ -508,13 +509,19 @@ int fs_get_metadata(struct fs_file *file,
                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)
 {
index 55e227592ee38c2752c110576d5cd47e7b96b8b2..aac904ffcd23251c7fa392d0894dbc0f90122321 100644 (file)
@@ -164,6 +164,7 @@ fs_metawrap_set_metadata(struct fs_file *_file, const char *key,
 
 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;
@@ -171,7 +172,7 @@ fs_metawrap_get_metadata(struct 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 */
index 8a3d696de7f2fc38517ded5e8196c678e18236c1..cd63fd7c5e1200e40e635ba1025b66554e110c6b 100644 (file)
@@ -283,6 +283,7 @@ fs_random_fail_range(struct fs *_fs, struct event *event,
 
 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;
@@ -290,7 +291,7 @@ fs_randomfail_get_metadata(struct 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);
 }
 
index fa753a39dac29ca6f4eab7582d4a97679e79166b..a6c21d06b9d75e7cff1c8994583ebb3337b74565 100644 (file)
@@ -111,6 +111,7 @@ fs_test_set_metadata(struct fs_file *_file, const char *key,
 
 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;
index ea8130b409a0fd2caa6d27473f5d1acb88baba87..e427a879a8ef9231703a7dbb79df7c7e91489d4b 100644 (file)
@@ -43,9 +43,10 @@ void fs_wrapper_set_metadata(struct fs_file *file, const char *key,
 }
 
 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)
index e888e9d81c72d47ae8e9b203a47076d1733f9fad..ebfd35dd8aa20a4d3433f70aed6ef7ad395b0d61 100644 (file)
@@ -1,6 +1,8 @@
 #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);
@@ -11,6 +13,7 @@ void fs_wrapper_wait_async(struct fs *fs);
 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);