[CRIU] [RFC PATCH 1/6] reserve the extra room in fstypes[]

Oleg Nesterov oleg at redhat.com
Fri Mar 27 10:55:45 PDT 2015


Preparation. Enlarge fstypes[] to make it possible to add the new
fstype's dynamically.

This means ths find_fstype_by_name() and decode_fstype() need the
additional ->name == NULL check to terminate the search.

Also change them to start with "i == 1", we rely on the fact that
fstypes[0] is FSTYPE__UNSUPPORTED anyway.

Signed-off-by: Oleg Nesterov <oleg at redhat.com>
---
 mount.c |   26 +++++++++++++++++++-------
 1 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/mount.c b/mount.c
index 021c6e3..ff2bce5 100644
--- a/mount.c
+++ b/mount.c
@@ -1033,7 +1033,7 @@ out:
 	return ret;
 }
 
-static struct fstype fstypes[] = {
+static struct fstype fstypes[32] = {
 	{
 		.name = "unsupported",
 		.code = FSTYPE__UNSUPPORTED,
@@ -1107,9 +1107,15 @@ struct fstype *find_fstype_by_name(char *fst)
 	 * names anyway)
 	 */
 
-	for (i = 0; i < ARRAY_SIZE(fstypes); i++)
-		if (!strcmp(fstypes[i].name, fst))
-			return fstypes + i;
+	for (i = 1; i < ARRAY_SIZE(fstypes); i++) {
+		struct fstype *fstype = fstypes + i;
+
+		if (!fstype->name)
+			break;
+
+		if (!strcmp(fstype->name, fst))
+			return fstype;
+	}
 
 	return &fstypes[0];
 }
@@ -1121,9 +1127,15 @@ static struct fstype *decode_fstype(u32 fst)
 	if (fst == FSTYPE__UNSUPPORTED)
 		goto uns;
 
-	for (i = 0; i < ARRAY_SIZE(fstypes); i++)
-		if (fstypes[i].code == fst)
-			return fstypes + i;
+	for (i = 1; i < ARRAY_SIZE(fstypes); i++) {
+		struct fstype *fstype = fstypes + i;
+
+		if (!fstype->name)
+			break;
+
+		if (fstype->code == fst)
+			return fstype;
+	}
 uns:
 	return &fstypes[0];
 }
-- 
1.5.5.1



More information about the CRIU mailing list