[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/1 hurd] ext2fs: New default: use xattrs to store translator rec
From: |
Damien Zammit |
Subject: |
[PATCH 1/1 hurd] ext2fs: New default: use xattrs to store translator records |
Date: |
Sun, 03 Mar 2024 01:00:53 +0000 |
Replaces experimental option --x-xattr-translator-records
with --no-xattr-translator-records to allow rolling back to
previous behaviour.
NB:
- Legacy records still work with either setting.
- Adding a new record removes a legacy one.
---
ext2fs/ext2fs.c | 18 +++++++++---------
ext2fs/inode.c | 25 +++++++++++++++----------
2 files changed, 24 insertions(+), 19 deletions(-)
diff --git a/ext2fs/ext2fs.c b/ext2fs/ext2fs.c
index 3c76d8c8..3836bdf6 100644
--- a/ext2fs/ext2fs.c
+++ b/ext2fs/ext2fs.c
@@ -89,15 +89,14 @@ struct ext2_group_desc *group_desc_image;
struct pokel global_pokel;
-int use_xattr_translator_records;
#ifdef EXT2FS_DEBUG
int ext2_debug_flag;
#endif
/* Use extended attribute-based translator records. */
-int use_xattr_translator_records;
-#define X_XATTR_TRANSLATOR_RECORDS -1
+int use_xattr_translator_records = 1;
+#define NO_XATTR_TRANSLATOR_RECORDS -1
/* Ext2fs-specific options. */
static const struct argp_option
@@ -108,8 +107,8 @@ options[] =
" (not compiled in)"
#endif
},
- {"x-xattr-translator-records", X_XATTR_TRANSLATOR_RECORDS, 0, 0,
- "Store translator records in extended attributes (experimental)"},
+ {"no-xattr-translator-records", NO_XATTR_TRANSLATOR_RECORDS, 0, 0,
+ "Do not store translator records in extended attributes (legacy)"},
#ifdef ALTERNATE_SBLOCK
/* XXX This is not implemented. */
{"sblock", 'S', "BLOCKNO", 0,
@@ -138,8 +137,8 @@ parse_opt (int key, char *arg, struct argp_state *state)
case 'D':
values->debug_flag = 1;
break;
- case X_XATTR_TRANSLATOR_RECORDS:
- values->use_xattr_translator_records = 1;
+ case NO_XATTR_TRANSLATOR_RECORDS:
+ values->use_xattr_translator_records = 0;
break;
#ifdef ALTERNATE_SBLOCK
case 'S':
@@ -159,6 +158,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
return ENOMEM;
state->hook = values;
memset (values, 0, sizeof *values);
+ values->use_xattr_translator_records = use_xattr_translator_records;
#ifdef ALTERNATE_SBLOCK
values->sb_block = SBLOCK_BLOCK;
#endif
@@ -194,8 +194,8 @@ diskfs_append_args (char **argz, size_t *argz_len)
/* Get the standard things. */
err = diskfs_append_std_options (argz, argz_len);
- if (!err && use_xattr_translator_records)
- err = argz_add (argz, argz_len, "--x-xattr-translator-records");
+ if (!err && !use_xattr_translator_records)
+ err = argz_add (argz, argz_len, "--no-xattr-translator-records");
#ifdef EXT2FS_DEBUG
if (!err && ext2_debug_flag)
diff --git a/ext2fs/inode.c b/ext2fs/inode.c
index 5b99069e..ead82678 100644
--- a/ext2fs/inode.c
+++ b/ext2fs/inode.c
@@ -764,19 +764,24 @@ diskfs_get_translator (struct node *np, char **namep,
mach_msg_type_number_t *na
return err;
}
- err = ext2_get_xattr (np, "gnu.translator", NULL, &datalen);
- if (err)
- return err;
+ /* If xattr is supported by this filesystem, check for new translator record
+ * regardless of flag to use it or not */
+ if (EXT2_HAS_COMPAT_FEATURE (sblock, EXT2_FEATURE_COMPAT_EXT_ATTR))
+ {
+ err = ext2_get_xattr (np, "gnu.translator", NULL, &datalen);
+ if (err)
+ return err;
- *namep = malloc (datalen);
- if (!*namep)
- err = ENOMEM;
- else
- err = ext2_get_xattr (np, "gnu.translator", *namep, &datalen);
+ *namep = malloc (datalen);
+ if (!*namep)
+ err = ENOMEM;
+ else
+ err = ext2_get_xattr (np, "gnu.translator", *namep, &datalen);
- diskfs_end_catch_exception ();
+ diskfs_end_catch_exception ();
- *namelen = datalen;
+ *namelen = datalen;
+ }
return err;
}
--
2.43.0