Re: [PATCH] ext2: Explicitly assign values to on-disk enum of filetypes

From: Andreas Dilger
Date: Thu Nov 19 2009 - 02:39:27 EST


On 2009-11-18, at 08:25, Jan Blunck wrote:
Here is an old patch that I found in my tree. Andreas, it seems that this is something you proposed.

Comments?

This is definitely my preferred coding style for constants that form a permanent part of the API/ABI/disk format.

The enum is useful because some debuggers can display the symbolic name of a constant if a named enum is present (though in this case it isn't), but it avoids the risk of someone accidentally inserting or removing a value in the middle of the enum.

For in-memory-only enums that isn't important at all, but for some developers it isn't always clear what is in-memory and what is on-disk or part of an API. Also, the compiler will warn if the same value is assigned multiple times, which isn't necessarily a worry with the few values here, but for large lists of #defines like e.g. EXT2_FEATURE_INCOMPAT_* it is a real risk, and I've seen a few cases where the same value was #defined multiple times accidentally (e.g. with patches vs. upstream merges).

From 290d3d969850ff9555bc213035b1c4e401ea9ada Mon Sep 17 00:00:00 2001
From: Jan Blunck <jblunck@xxxxxxx>
Date: Wed, 18 Nov 2009 17:10:56 +0100
Subject: [PATCH] ext2: Explicitly assign values to on-disk enum of filetypes

It is somewhat dangerous to use a straight enum here, because this will
reassign values of later variables if one of the earlier ones is removed.

Signed-off-by: Jan Blunck <jblunck@xxxxxxx>
Cc: Andreas Dilger <adilger@xxxxxxx>
---
include/linux/ext2_fs.h | 16 ++++++++--------
1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/include/linux/ext2_fs.h b/include/linux/ext2_fs.h
index 121720d..2dfa707 100644
--- a/include/linux/ext2_fs.h
+++ b/include/linux/ext2_fs.h
@@ -565,14 +565,14 @@ struct ext2_dir_entry_2 {
* other bits are reserved for now.
*/
enum {
- EXT2_FT_UNKNOWN,
- EXT2_FT_REG_FILE,
- EXT2_FT_DIR,
- EXT2_FT_CHRDEV,
- EXT2_FT_BLKDEV,
- EXT2_FT_FIFO,
- EXT2_FT_SOCK,
- EXT2_FT_SYMLINK,
+ EXT2_FT_UNKNOWN = 0,
+ EXT2_FT_REG_FILE = 1,
+ EXT2_FT_DIR = 2,
+ EXT2_FT_CHRDEV = 3,
+ EXT2_FT_BLKDEV = 4,
+ EXT2_FT_FIFO = 5,
+ EXT2_FT_SOCK = 6,
+ EXT2_FT_SYMLINK = 7,
EXT2_FT_MAX
};

--
1.6.4.2



Cheers, Andreas
--
Andreas Dilger
Sr. Staff Engineer, Lustre Group
Sun Microsystems of Canada, Inc.

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