Re: [PATCH 1/4] e2fsprogs: Add undo I/O manager

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





Andreas Dilger wrote:
On Aug 01, 2007  21:04 +0530, Aneesh Kumar K.V wrote:
+static errcode_t write_file_system_identity(io_channel undo_channel,
+							TDB_CONTEXT *tdb)
+{
+	/* Write to tdb file in the file system byte order */
+	tdb_key.dptr = "filesystem MTIME";
+	tdb_key.dsize = sizeof("filesystem MTIME");
+	tdb_data.dptr = (unsigned char *) &(super.s_mtime);
+	tdb_data.dsize = sizeof(super.s_mtime);
+
+	tdb_key.dptr = "filesystem UUID";
+	tdb_key.dsize = sizeof("filesystem UUID");
+	tdb_data.dptr = (unsigned char *)&(super.s_uuid);
+	tdb_data.dsize = sizeof(super.s_uuid);

Is this the mtime and UUID of the new filesystem or the old one?  It
should be the UUID and mtime of the new filesystem, so that the
undo file can be verified against the current superblock.  This poses
a bit of a problem, because that information isn't saved until after
the mke2fs run is finished.

One possibility is to overwrite this information at the end of mke2fs
after the new UUID and mtime are written?


This can be done by writing the file system identity during the the io_channel_close.
How about this patch on top of the last series. I will merge this into the patcheset

diff --git a/lib/ext2fs/undo_io.c b/lib/ext2fs/undo_io.c
index 30e2514..a80bafc 100644
--- a/lib/ext2fs/undo_io.c
+++ b/lib/ext2fs/undo_io.c
@@ -159,8 +159,8 @@ static errcode_t write_file_system_identity(io_channel undo_channel,
	/* Also store the block size */
	tdb_key.dptr = "filesystem BLKSIZE";
	tdb_key.dsize = sizeof("filesystem BLKSIZE");
-	tdb_data.dptr = (unsigned char *)&(undo_channel->block_size);
-	tdb_data.dsize = sizeof(undo_channel->block_size);
+	tdb_data.dptr = (unsigned char *)&(tdb_data_size);
+	tdb_data.dsize = sizeof(tdb_data_size);

	retval = tdb_store(tdb, tdb_key, tdb_data, TDB_INSERT);
	if (retval == -1) {
@@ -199,13 +199,6 @@ static errcode_t undo_write_tdb(io_channel channel,
	 */
	if (!tdb_data_size) {
		tdb_data_size = channel->block_size;
-
-		/*
-		 * First write. Write the file system identity
-		 */
-		retval = write_file_system_identity(channel, data->tdb);
-		if (retval)
-			return retval;
	}

	if (count == 1)
@@ -405,6 +398,11 @@ static errcode_t undo_close(io_channel channel)
	if (--channel->refcount > 0)
		return 0;

+	/* Before closing Write the file system identity */
+	retval = write_file_system_identity(channel, data->tdb);
+	if (retval)
+		return retval;
+
	if (data->real)
		retval = io_channel_close(data->real);

-
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux