bug-hurd
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]