dovecot-2.2: lib-fs: Added FS_PROPERTY_COPY_METADATA and fs_set_...

dovecot at dovecot.org dovecot at dovecot.org
Thu Jul 10 12:42:06 UTC 2014


details:   http://hg.dovecot.org/dovecot-2.2/rev/2fada3a76d10
changeset: 17614:2fada3a76d10
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Jul 10 15:40:08 2014 +0300
description:
lib-fs: Added FS_PROPERTY_COPY_METADATA and fs_set_metadata() tracking.

diffstat:

 src/lib-fs/fs-api-private.h |   4 +++-
 src/lib-fs/fs-api.c         |  10 ++++++++++
 src/lib-fs/fs-api.h         |   5 ++++-
 3 files changed, 17 insertions(+), 2 deletions(-)

diffs (91 lines):

diff -r 27d269bbbdf0 -r 2fada3a76d10 src/lib-fs/fs-api-private.h
--- a/src/lib-fs/fs-api-private.h	Wed Jul 09 15:55:59 2014 +0300
+++ b/src/lib-fs/fs-api-private.h	Thu Jul 10 15:40:08 2014 +0300
@@ -75,7 +75,6 @@
 
 	struct istream *seekable_input;
 	struct istream *pending_read_input;
-	bool write_pending;
 
 	const struct hash_method *write_digest_method;
 	void *write_digest;
@@ -86,6 +85,9 @@
 	struct fs_file *copy_src;
 	struct istream *copy_input;
 	struct ostream *copy_output;
+
+	unsigned int write_pending;
+	unsigned int metadata_changed:1;
 };
 
 struct fs_lock {
diff -r 27d269bbbdf0 -r 2fada3a76d10 src/lib-fs/fs-api.c
--- a/src/lib-fs/fs-api.c	Wed Jul 09 15:55:59 2014 +0300
+++ b/src/lib-fs/fs-api.c	Thu Jul 10 15:40:08 2014 +0300
@@ -242,6 +242,7 @@
 {
 	if (file->fs->v.set_metadata != NULL) T_BEGIN {
 		file->fs->v.set_metadata(file, key, value);
+		file->metadata_changed = TRUE;
 	} T_END;
 }
 
@@ -472,6 +473,8 @@
 	T_BEGIN {
 		ret = file->fs->v.write_stream_finish(file, TRUE);
 	} T_END;
+	if (ret != 0)
+		file->metadata_changed = FALSE;
 	return ret;
 }
 
@@ -482,6 +485,8 @@
 	T_BEGIN {
 		ret = file->fs->v.write_stream_finish(file, TRUE);
 	} T_END;
+	if (ret != 0)
+		file->metadata_changed = FALSE;
 	return ret;
 }
 
@@ -493,6 +498,7 @@
 	T_BEGIN {
 		(void)file->fs->v.write_stream_finish(file, FALSE);
 	} T_END;
+	file->metadata_changed = FALSE;
 }
 
 void fs_write_set_hash(struct fs_file *file, const struct hash_method *method,
@@ -628,6 +634,8 @@
 	T_BEGIN {
 		ret = src->fs->v.copy(src, dest);
 	} T_END;
+	if (ret < 0 || errno != EAGAIN)
+		dest->metadata_changed = FALSE;
 	return ret;
 }
 
@@ -638,6 +646,8 @@
 	T_BEGIN {
 		ret = dest->fs->v.copy(NULL, dest);
 	} T_END;
+	if (ret < 0 || errno != EAGAIN)
+		dest->metadata_changed = FALSE;
 	return ret;
 }
 
diff -r 27d269bbbdf0 -r 2fada3a76d10 src/lib-fs/fs-api.h
--- a/src/lib-fs/fs-api.h	Wed Jul 09 15:55:59 2014 +0300
+++ b/src/lib-fs/fs-api.h	Thu Jul 10 15:40:08 2014 +0300
@@ -22,7 +22,10 @@
 	   when its children are deleted. */
 	FS_PROPERTY_DIRECTORIES	= 0x80,
 	FS_PROPERTY_WRITE_HASH_MD5	= 0x100,
-	FS_PROPERTY_WRITE_HASH_SHA256	= 0x200
+	FS_PROPERTY_WRITE_HASH_SHA256	= 0x200,
+	/* fs_copy() will copy the metadata if fs_set_metadata() hasn't
+	   been explicitly called. */
+	FS_PROPERTY_COPY_METADATA	= 0x400
 };
 
 enum fs_open_mode {


More information about the dovecot-cvs mailing list