Re: [PATCH 1/1 hurd] ext2fs: New default: use xattrs to store translator records

2024-03-04 Thread Samuel Thibault
Applied, thanks!

Damien Zammit, le dim. 03 mars 2024 01:00:53 +, a ecrit:
> 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
> 
> 
> 

-- 
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.



[PATCH hurd] MAKEDEV: when creating devices, ensure the underlying files are either block/char devices or directories

2024-03-04 Thread Flavio Cruz
The perl test suite has a test where it reads all the block or char devices
under /dev without following the translators. Then it compares it against a
list of devices that read the translated nodes stat info.

The patch changes how the the device files are created initially so that the 
stat information
is identical and makes the Hurd environment appear more similar to other 
operating
systems.
---
 sutils/MAKEDEV.sh | 67 +++
 1 file changed, 44 insertions(+), 23 deletions(-)

diff --git a/sutils/MAKEDEV.sh b/sutils/MAKEDEV.sh
index 0702663..79757fc 100644
--- a/sutils/MAKEDEV.sh
+++ b/sutils/MAKEDEV.sh
@@ -81,6 +81,27 @@ st() {
   if [ "$KEEP" ] && showtrans "$NODE" > /dev/null 2>&1 ; then
 return;
   fi
+  local NODE_TYPE="$1"
+  case "$NODE_TYPE" in
+b|c|d|f)
+  shift 1
+  ;;
+*)
+  NODE_TYPE="f"
+  ;;
+  esac
+  if [ ! -e "$NODE" ]; then
+case "$NODE_TYPE" in
+  b|c)
+cmd mknod "$NODE" "$NODE_TYPE" 0 0
+;;
+  d)
+cmd mkdir "$NODE"
+;;
+  *)
+;;
+esac
+  fi
   if cmd settrans $STFLAGS -c "$NODE"; then
 cmd chown "$OWNER" "$NODE"
 cmd chmod "$PERM" "$NODE"
@@ -109,47 +130,47 @@ mkdev() {
mkdev console tty random urandom null zero full fd time mem klog shm
;;
   console|com[0-9])
-   st $I root 600 /hurd/term ${DEVDIR}/$I device $I;;
+   st $I root 600 c /hurd/term ${DEVDIR}/$I device $I;;
   vcs)
-st $I root 600 /hurd/console;;
+st $I root 600 d /hurd/console;;
   tty[1-9][0-9]|tty[1-9])
-st $I root 600 /hurd/term ${DEVDIR}/$I hurdio \
+st $I root 600 c /hurd/term ${DEVDIR}/$I hurdio \
   ${DEVDIR}/vcs/`echo $I | sed -e s/tty//`/console;;
   lpr[0-9])
-st $I root 660 /hurd/streamio "$I";;
+st $I root 660 c /hurd/streamio "$I";;
   random)
-   st $I root 644 /hurd/random --seed-file /var/lib/random-seed;;
+   st $I root 644 c /hurd/random --seed-file /var/lib/random-seed;;
   urandom)
# Our /dev/random is both secure and non-blocking.  Create a
# link for compatibility with Linux.
cmd ln -f -s random $I;;
   null)
-   st $I root 666 /hurd/null;;
+   st $I root 666 c /hurd/null;;
   full)
-   st $I root 666 /hurd/null --full;;
+   st $I root 666 c /hurd/null --full;;
   zero)
-   st $I root 666 /bin/nullauth -- /hurd/storeio -Tzero;;
+   st $I root 666 c /bin/nullauth -- /hurd/storeio -Tzero;;
   tty)
-   st $I root 666 /hurd/magic tty;;
+   st $I root 666 c /hurd/magic tty;;
   fd)
-   st $I root 666 /hurd/magic --directory fd
+   st $I root 666 d /hurd/magic --directory fd
cmd ln -f -s fd/0 stdin
cmd ln -f -s fd/1 stdout
cmd ln -f -s fd/2 stderr
;;
   'time')
-   st $I root 644 /hurd/storeio --no-cache time ;;
+   st $I root 644 c /hurd/storeio --no-cache time ;;
   mem)
-   st $I root 660 /hurd/storeio --no-cache mem ;;
+   st $I root 660 c /hurd/storeio --no-cache mem ;;
   klog)
-st $I root 660 /hurd/streamio kmsg;;
+st $I root 660 c /hurd/streamio kmsg;;
   # ptys
   [pt]ty[pqrstuvwxyzPQRS]?)
# Make one pty, both the master and slave halves.
local id="${I#???}"
-   st pty$id root 666 /hurd/term ${DEVDIR}/pty$id \
+   st pty$id root 666 c /hurd/term ${DEVDIR}/pty$id \
  pty-master ${DEVDIR}/tty$id
-   st tty$id root 666 /hurd/term ${DEVDIR}/tty$id \
+   st tty$id root 666 c /hurd/term ${DEVDIR}/tty$id \
  pty-slave ${DEVDIR}/pty$id
;;
   [pt]ty[pqrstuvwxyzPQRS])
@@ -162,11 +183,11 @@ mkdev() {
;;
 
   fd*|mt*)
-   st $I root 640 /hurd/storeio $I
+   st $I root 640 b /hurd/storeio $I
;;
 
   rumpdisk)
-   st $I root 660 /hurd/rumpdisk
+   st $I root 660 c /hurd/rumpdisk
cmd ln -f -s rumpdisk disk
;;
   [hrscw]d*)
@@ -214,18 +235,18 @@ mkdev() {
# The device name passed all syntax checks, so finally use it!
if [ "$USE_PARTSTORE" ] && [ -z "$rest" ] && [ "$sliceno" ]; then
  local dev=${I%s[0-9]*}
- st $I root 640 /hurd/storeio -T typed part:$sliceno:device:$MASTER$dev
+ st $I root 640 b /hurd/storeio -T typed 
part:$sliceno:device:$MASTER$dev
else
- st $I root 640 /hurd/storeio $MASTER$I
+ st $I root 640 b /hurd/storeio $MASTER$I
fi
;;
 
   netdde)
-   st $I root 660 /hurd/netdde
+   st $I root 660 c /hurd/netdde
cmd ln -f -s netdde net
;;
   eth*)
-   st $I root 660 /hurd/devnode -M /dev/net $I;;
+   st $I root 660 c /hurd/devnode -M /dev/net $I;;
 
   # /dev/shm is used by the POSIX.1 shm_open call in libc.
   # We don't want the underlying node to be written by randoms,
@@ -235,7 +256,7 @@