[RFC][STEP 1][PATCH 4/4] nilfs-utils: nilfs-tune: implement functionality of xafile initialization

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

 



From: Vyacheslav Dubeyko <slava@xxxxxxxxxxx>
Subject: [RFC][STEP 1][PATCH 4/4] nilfs-utils: nilfs-tune: implement functionality of xafile initialization

This patch implements functionality of request xafile creation
on existed NILFS2 volume by means of nilfs-tune utility.

The nilfs-tune utility simply modify superblock of such volume by
means of setting NILFS_FEATURE_COMPAT_INIT_XAFILE in
s_feature_compat field of superblock. Then, file system driver
creates xafile in the case of presence above-mentioned flag
(NILFS_FEATURE_COMPAT_INIT_XAFILE).

Signed-off-by: Vyacheslav Dubeyko <slava@xxxxxxxxxxx>
CC: Ryusuke Konishi <konishi.ryusuke@xxxxxxxxxxxxx>
---
 man/nilfs-tune.8             |    9 +++++++++
 sbin/nilfs-tune/nilfs-tune.c |   20 ++++++++++++++++++--
 2 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/man/nilfs-tune.8 b/man/nilfs-tune.8
index 47dc1b3..e0ed198 100644
--- a/man/nilfs-tune.8
+++ b/man/nilfs-tune.8
@@ -52,6 +52,15 @@ Enable block count per checkpoint.
 After setting this option, fsck should be run on the filesystem to
 make the counts right, but no fsck tool is available yet, sorry.
 .RE
+.RS
+.TP
+.B xafile_init
+Enable xafile creation (if it doesn't exist).
+After setting this option, superblock will keep flag that it requests
+xafile creation. Creation request will fail if a NILFS2 volume contains
+xafile yet. The xafile will be created during nearest operation of
+segment creation.
+.RE
 .TP
 .B \-U \fIUUID\fP
 Set the universally unique identifier (UUID) of the file system to UUID.
diff --git a/sbin/nilfs-tune/nilfs-tune.c b/sbin/nilfs-tune/nilfs-tune.c
index 0698649..bc70681 100644
--- a/sbin/nilfs-tune/nilfs-tune.c
+++ b/sbin/nilfs-tune/nilfs-tune.c
@@ -84,7 +84,7 @@ static void nilfs_tune_usage(void)
 
 const static __u64 ok_features[NILFS_MAX_FEATURE_TYPES] = {
 	/* Compat */
-	0,
+	NILFS_FEATURE_COMPAT_INIT_XAFILE,
 	/* Read-only compat */
 	NILFS_FEATURE_COMPAT_RO_BLOCK_COUNT,
 	/* Incompat */
@@ -93,7 +93,7 @@ const static __u64 ok_features[NILFS_MAX_FEATURE_TYPES] = {
 
 const static __u64 clear_ok_features[NILFS_MAX_FEATURE_TYPES] = {
 	/* Compat */
-	0,
+	NILFS_FEATURE_COMPAT_INIT_XAFILE,
 	/* Read-only compat */
 	NILFS_FEATURE_COMPAT_RO_BLOCK_COUNT,
 	/* Incompat */
@@ -454,6 +454,10 @@ static void show_nilfs_sb(struct nilfs_super_block *sbp)
 	printf("CRC check data size:\t  0x%08x\n", le32_to_cpu(sbp->s_bytes));
 }
 
+#define NILFS_HAS_XAFILE(features) \
+	(((__u64 *)features)[NILFS_FEATURE_TYPE_COMPAT_RO] & \
+	 NILFS_FEATURE_COMPAT_RO_XAFILE)
+
 static int update_feature_set(struct nilfs_super_block *sbp,
 			      struct nilfs_tune_options *opts)
 {
@@ -487,6 +491,18 @@ static int update_feature_set(struct nilfs_super_block *sbp,
 				nilfs_feature2string(bad_type, bad_mask));
 		}
 	} else {
+		if ((features[NILFS_FEATURE_TYPE_COMPAT] &
+		     NILFS_FEATURE_COMPAT_INIT_XAFILE) &&
+		    (features[NILFS_FEATURE_TYPE_COMPAT_RO] &
+		     NILFS_FEATURE_COMPAT_RO_XAFILE)) {
+			fprintf(stderr,
+				"feature %s is not allowed to be set\n",
+				nilfs_feature2string(NILFS_FEATURE_TYPE_COMPAT,
+					NILFS_FEATURE_COMPAT_INIT_XAFILE));
+			ret = -1;
+			return ret;
+		}
+
 		sbp->s_feature_compat =
 			cpu_to_le64(features[NILFS_FEATURE_TYPE_COMPAT]);
 		sbp->s_feature_compat_ro =
-- 
1.7.9.5



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




[Index of Archives]     [Linux Filesystem Development]     [Linux BTRFS]     [Linux CIFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux