All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] erofs-utils: dump: Add --cat flag to show file contents
@ 2025-01-09  9:55 Juan Hernandez
  2025-01-09 10:37 ` Gao Xiang
  0 siblings, 1 reply; 5+ messages in thread
From: Juan Hernandez @ 2025-01-09  9:55 UTC (permalink / raw)
  To: linux-erofs; +Cc: Juan Hernandez

This patch adds a new '--cat' flag to the 'dump.erofs' command. When
used it will write to the standard output the content of the file
indicated by the '--path' or '--nid' options. For example, if there is a
'/mydir/myfile.txt' file containg the text 'mytext':

    $ dump.erofs --cat --path=/mydir/myfile.txt myimage.erofs
    mytext

Signed-off-by: Juan Hernandez <jhernand@redhat.com>
---
 dump/main.c      | 72 ++++++++++++++++++++++++++++++++++++++++++++++++
 man/dump.erofs.1 | 13 +++++++--
 2 files changed, 83 insertions(+), 2 deletions(-)

diff --git a/dump/main.c b/dump/main.c
index 372162e..ed8d44d 100644
--- a/dump/main.c
+++ b/dump/main.c
@@ -26,6 +26,7 @@ struct erofsdump_cfg {
 	bool show_superblock;
 	bool show_statistics;
 	bool show_subdirectories;
+	bool show_file_content;
 	erofs_nid_t nid;
 	const char *inode_path;
 };
@@ -80,6 +81,7 @@ static struct option long_options[] = {
 	{"path", required_argument, NULL, 4},
 	{"ls", no_argument, NULL, 5},
 	{"offset", required_argument, NULL, 6},
+	{"cat", no_argument, NULL, 7},
 	{0, 0, 0, 0},
 };
 
@@ -123,6 +125,7 @@ static void usage(int argc, char **argv)
 		" -s              show information about superblock\n"
 		" --device=X      specify an extra device to be used together\n"
 		" --ls            show directory contents (INODE required)\n"
+		" --cat           show file contents (INODE required)\n"
 		" --nid=#         show the target inode info of nid #\n"
 		" --offset=#      skip # bytes at the beginning of IMAGE\n"
 		" --path=X        show the target inode info of path X\n",
@@ -186,6 +189,9 @@ static int erofsdump_parse_options_cfg(int argc, char **argv)
 				return -EINVAL;
 			}
 			break;
+		case 7:
+			dumpcfg.show_file_content = true;
+			break;
 		default:
 			return -EINVAL;
 		}
@@ -672,6 +678,63 @@ static void erofsdump_show_superblock(void)
 			uuid_str);
 }
 
+static void erofsdump_show_file_content(void)
+{
+	int err;
+	struct erofs_inode inode = { .sbi = &g_sbi, .nid = dumpcfg.nid };
+	size_t buffer_size;
+	char *buffer_ptr;
+	erofs_off_t pending_size;
+	erofs_off_t read_offset;
+	erofs_off_t read_size;
+
+	if (dumpcfg.inode_path) {
+		err = erofs_ilookup(dumpcfg.inode_path, &inode);
+		if (err) {
+			erofs_err("read inode failed @ %s", dumpcfg.inode_path);
+			return;
+		}
+	} else {
+		err = erofs_read_inode_from_disk(&inode);
+		if (err) {
+			erofs_err("read inode failed @ nid %llu", inode.nid | 0ULL);
+			return;
+		}
+	}
+
+	if (!S_ISREG(inode.i_mode)) {
+		erofs_err("not a regular file @ nid %llu", inode.nid | 0ULL);
+		return;
+	}
+
+	buffer_size = erofs_blksiz(inode.sbi);
+	buffer_ptr = malloc(buffer_size);
+	if (!buffer_ptr) {
+		erofs_err("buffer allocation failed @ nid %llu", inode.nid | 0ULL);
+		return;
+	}
+
+	pending_size = inode.i_size;
+	read_offset = 0;
+	while (pending_size > 0) {
+		read_size = pending_size > buffer_size? buffer_size: pending_size;
+		err = erofs_pread(&inode, buffer_ptr, read_size, read_offset);
+		if (err) {
+			erofs_err("read file failed @ nid %llu", inode.nid | 0ULL);
+			goto out;
+		}
+		pending_size -= read_size;
+		read_offset += read_size;
+		fwrite(buffer_ptr, read_size, 1, stdout);
+	}
+	fflush(stdout);
+
+out:
+	free(buffer_ptr);
+}
+
+
+
 int main(int argc, char **argv)
 {
 	int err;
@@ -696,6 +759,15 @@ int main(int argc, char **argv)
 		goto exit_dev_close;
 	}
 
+	if (dumpcfg.show_file_content) {
+		if (dumpcfg.show_superblock || dumpcfg.show_statistics || dumpcfg.show_subdirectories) {
+			fprintf(stderr, "The '--cat' flag is incompatible with '-S', '-e', '-s' and '--ls'.\n");
+			goto exit_dev_close;
+		}
+		erofsdump_show_file_content();
+		goto exit_dev_close;
+	}
+
 	if (!dumpcfg.totalshow) {
 		dumpcfg.show_superblock = true;
 		dumpcfg.totalshow = 1;
diff --git a/man/dump.erofs.1 b/man/dump.erofs.1
index 6237ead..ec823ec 100644
--- a/man/dump.erofs.1
+++ b/man/dump.erofs.1
@@ -8,7 +8,7 @@ or overall disk statistics information from an EROFS-formatted image.
 \fBdump.erofs\fR [\fIOPTIONS\fR] \fIIMAGE\fR
 .SH DESCRIPTION
 .B dump.erofs
-is used to retrieve erofs metadata from \fIIMAGE\fP and demonstrate
+is used to retrieve erofs metadata and data from \fIIMAGE\fP and demonstrate
 .br
 1) overall disk statistics,
 .br
@@ -16,7 +16,9 @@ is used to retrieve erofs metadata from \fIIMAGE\fP and demonstrate
 .br
 3) file information of the given inode NID,
 .br
-4) file extent information of the given inode NID.
+4) file extent information of the given inode NID,
+.br
+5) file content for the given inode NID.
 .SH OPTIONS
 .TP
 .BI "\-\-device=" path
@@ -32,6 +34,13 @@ or
 .I path
 required.
 .TP
+.BI "\-\-cat"
+Write file content to standard output.
+.I NID
+or
+.I path
+required.
+.TP
 .BI "\-\-nid=" NID
 Specify an inode NID in order to print its file information.
 .TP
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] erofs-utils: dump: Add --cat flag to show file contents
  2025-01-09  9:55 [PATCH] erofs-utils: dump: Add --cat flag to show file contents Juan Hernandez
@ 2025-01-09 10:37 ` Gao Xiang
  2025-01-09 10:49   ` Juan Hernández
  0 siblings, 1 reply; 5+ messages in thread
From: Gao Xiang @ 2025-01-09 10:37 UTC (permalink / raw)
  To: Juan Hernandez, linux-erofs

Hi Juan,

On 2025/1/9 17:55, Juan Hernandez wrote:
> This patch adds a new '--cat' flag to the 'dump.erofs' command. When
> used it will write to the standard output the content of the file
> indicated by the '--path' or '--nid' options. For example, if there is a
> '/mydir/myfile.txt' file containg the text 'mytext':
> 
>      $ dump.erofs --cat --path=/mydir/myfile.txt myimage.erofs
>      mytext
> 
> Signed-off-by: Juan Hernandez <jhernand@redhat.com>

Thanks for the patch!
It looks good to me, just minor nits..

> ---
>   dump/main.c      | 72 ++++++++++++++++++++++++++++++++++++++++++++++++
>   man/dump.erofs.1 | 13 +++++++--
>   2 files changed, 83 insertions(+), 2 deletions(-)
> 
> diff --git a/dump/main.c b/dump/main.c
> index 372162e..ed8d44d 100644
> --- a/dump/main.c
> +++ b/dump/main.c
> @@ -26,6 +26,7 @@ struct erofsdump_cfg {
>   	bool show_superblock;
>   	bool show_statistics;
>   	bool show_subdirectories;
> +	bool show_file_content;
>   	erofs_nid_t nid;
>   	const char *inode_path;
>   };
> @@ -80,6 +81,7 @@ static struct option long_options[] = {
>   	{"path", required_argument, NULL, 4},
>   	{"ls", no_argument, NULL, 5},
>   	{"offset", required_argument, NULL, 6},
> +	{"cat", no_argument, NULL, 7},
>   	{0, 0, 0, 0},
>   };
>   
> @@ -123,6 +125,7 @@ static void usage(int argc, char **argv)
>   		" -s              show information about superblock\n"
>   		" --device=X      specify an extra device to be used together\n"
>   		" --ls            show directory contents (INODE required)\n"
> +		" --cat           show file contents (INODE required)\n"
>   		" --nid=#         show the target inode info of nid #\n"
>   		" --offset=#      skip # bytes at the beginning of IMAGE\n"
>   		" --path=X        show the target inode info of path X\n",
> @@ -186,6 +189,9 @@ static int erofsdump_parse_options_cfg(int argc, char **argv)
>   				return -EINVAL;
>   			}
>   			break;
> +		case 7:
> +			dumpcfg.show_file_content = true;
> +			break;
>   		default:
>   			return -EINVAL;
>   		}
> @@ -672,6 +678,63 @@ static void erofsdump_show_superblock(void)
>   			uuid_str);
>   }
>   
> +static void erofsdump_show_file_content(void)
> +{
> +	int err;
> +	struct erofs_inode inode = { .sbi = &g_sbi, .nid = dumpcfg.nid };
> +	size_t buffer_size;
> +	char *buffer_ptr;
> +	erofs_off_t pending_size;
> +	erofs_off_t read_offset;
> +	erofs_off_t read_size;
> +
> +	if (dumpcfg.inode_path) {
> +		err = erofs_ilookup(dumpcfg.inode_path, &inode);
> +		if (err) {
> +			erofs_err("read inode failed @ %s", dumpcfg.inode_path);
> +			return;
> +		}
> +	} else {
> +		err = erofs_read_inode_from_disk(&inode);
> +		if (err) {
> +			erofs_err("read inode failed @ nid %llu", inode.nid | 0ULL);
> +			return;
> +		}
> +	}
> +
> +	if (!S_ISREG(inode.i_mode)) {

I think we could dump raw directory content too.


> +		erofs_err("not a regular file @ nid %llu", inode.nid | 0ULL);
> +		return;
> +	}
> +
> +	buffer_size = erofs_blksiz(inode.sbi);
> +	buffer_ptr = malloc(buffer_size);
> +	if (!buffer_ptr) {
> +		erofs_err("buffer allocation failed @ nid %llu", inode.nid | 0ULL);
> +		return;
> +	}
> +
> +	pending_size = inode.i_size;
> +	read_offset = 0;
> +	while (pending_size > 0) {
> +		read_size = pending_size > buffer_size? buffer_size: pending_size;
> +		err = erofs_pread(&inode, buffer_ptr, read_size, read_offset);
> +		if (err) {
> +			erofs_err("read file failed @ nid %llu", inode.nid | 0ULL);
> +			goto out;
> +		}
> +		pending_size -= read_size;
> +		read_offset += read_size;
> +		fwrite(buffer_ptr, read_size, 1, stdout);
> +	}
> +	fflush(stdout);
> +
> +out:
> +	free(buffer_ptr);
> +}
> +
> +
> +

Reduntant new lines..

Thanks,
Gao Xiang

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] erofs-utils: dump: Add --cat flag to show file contents
  2025-01-09 10:37 ` Gao Xiang
@ 2025-01-09 10:49   ` Juan Hernández
  2025-01-09 10:56     ` Juan Hernandez
  0 siblings, 1 reply; 5+ messages in thread
From: Juan Hernández @ 2025-01-09 10:49 UTC (permalink / raw)
  To: Gao Xiang; +Cc: linux-erofs

Thanks for your feedback Gao! I will address your concerns.

On Thu, Jan 9, 2025 at 11:43 AM Gao Xiang <hsiangkao@linux.alibaba.com> wrote:
>
> Hi Juan,
>
> On 2025/1/9 17:55, Juan Hernandez wrote:
> > This patch adds a new '--cat' flag to the 'dump.erofs' command. When
> > used it will write to the standard output the content of the file
> > indicated by the '--path' or '--nid' options. For example, if there is a
> > '/mydir/myfile.txt' file containg the text 'mytext':
> >
> >      $ dump.erofs --cat --path=/mydir/myfile.txt myimage.erofs
> >      mytext
> >
> > Signed-off-by: Juan Hernandez <jhernand@redhat.com>
>
> Thanks for the patch!
> It looks good to me, just minor nits..
>
> > ---
> >   dump/main.c      | 72 ++++++++++++++++++++++++++++++++++++++++++++++++
> >   man/dump.erofs.1 | 13 +++++++--
> >   2 files changed, 83 insertions(+), 2 deletions(-)
> >
> > diff --git a/dump/main.c b/dump/main.c
> > index 372162e..ed8d44d 100644
> > --- a/dump/main.c
> > +++ b/dump/main.c
> > @@ -26,6 +26,7 @@ struct erofsdump_cfg {
> >       bool show_superblock;
> >       bool show_statistics;
> >       bool show_subdirectories;
> > +     bool show_file_content;
> >       erofs_nid_t nid;
> >       const char *inode_path;
> >   };
> > @@ -80,6 +81,7 @@ static struct option long_options[] = {
> >       {"path", required_argument, NULL, 4},
> >       {"ls", no_argument, NULL, 5},
> >       {"offset", required_argument, NULL, 6},
> > +     {"cat", no_argument, NULL, 7},
> >       {0, 0, 0, 0},
> >   };
> >
> > @@ -123,6 +125,7 @@ static void usage(int argc, char **argv)
> >               " -s              show information about superblock\n"
> >               " --device=X      specify an extra device to be used together\n"
> >               " --ls            show directory contents (INODE required)\n"
> > +             " --cat           show file contents (INODE required)\n"
> >               " --nid=#         show the target inode info of nid #\n"
> >               " --offset=#      skip # bytes at the beginning of IMAGE\n"
> >               " --path=X        show the target inode info of path X\n",
> > @@ -186,6 +189,9 @@ static int erofsdump_parse_options_cfg(int argc, char **argv)
> >                               return -EINVAL;
> >                       }
> >                       break;
> > +             case 7:
> > +                     dumpcfg.show_file_content = true;
> > +                     break;
> >               default:
> >                       return -EINVAL;
> >               }
> > @@ -672,6 +678,63 @@ static void erofsdump_show_superblock(void)
> >                       uuid_str);
> >   }
> >
> > +static void erofsdump_show_file_content(void)
> > +{
> > +     int err;
> > +     struct erofs_inode inode = { .sbi = &g_sbi, .nid = dumpcfg.nid };
> > +     size_t buffer_size;
> > +     char *buffer_ptr;
> > +     erofs_off_t pending_size;
> > +     erofs_off_t read_offset;
> > +     erofs_off_t read_size;
> > +
> > +     if (dumpcfg.inode_path) {
> > +             err = erofs_ilookup(dumpcfg.inode_path, &inode);
> > +             if (err) {
> > +                     erofs_err("read inode failed @ %s", dumpcfg.inode_path);
> > +                     return;
> > +             }
> > +     } else {
> > +             err = erofs_read_inode_from_disk(&inode);
> > +             if (err) {
> > +                     erofs_err("read inode failed @ nid %llu", inode.nid | 0ULL);
> > +                     return;
> > +             }
> > +     }
> > +
> > +     if (!S_ISREG(inode.i_mode)) {
>
> I think we could dump raw directory content too.
>
>
> > +             erofs_err("not a regular file @ nid %llu", inode.nid | 0ULL);
> > +             return;
> > +     }
> > +
> > +     buffer_size = erofs_blksiz(inode.sbi);
> > +     buffer_ptr = malloc(buffer_size);
> > +     if (!buffer_ptr) {
> > +             erofs_err("buffer allocation failed @ nid %llu", inode.nid | 0ULL);
> > +             return;
> > +     }
> > +
> > +     pending_size = inode.i_size;
> > +     read_offset = 0;
> > +     while (pending_size > 0) {
> > +             read_size = pending_size > buffer_size? buffer_size: pending_size;
> > +             err = erofs_pread(&inode, buffer_ptr, read_size, read_offset);
> > +             if (err) {
> > +                     erofs_err("read file failed @ nid %llu", inode.nid | 0ULL);
> > +                     goto out;
> > +             }
> > +             pending_size -= read_size;
> > +             read_offset += read_size;
> > +             fwrite(buffer_ptr, read_size, 1, stdout);
> > +     }
> > +     fflush(stdout);
> > +
> > +out:
> > +     free(buffer_ptr);
> > +}
> > +
> > +
> > +
>
> Reduntant new lines..
>
> Thanks,
> Gao Xiang
>


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH] erofs-utils: dump: Add --cat flag to show file contents
  2025-01-09 10:49   ` Juan Hernández
@ 2025-01-09 10:56     ` Juan Hernandez
  2025-01-09 12:56       ` Gao Xiang via Linux-erofs
  0 siblings, 1 reply; 5+ messages in thread
From: Juan Hernandez @ 2025-01-09 10:56 UTC (permalink / raw)
  To: linux-erofs

This patch adds a new '--cat' flag to the 'dump.erofs' command. When
used it will write to the standard output the content of the file
indicated by the '--path' or '--nid' options. For example, if there is a
'/mydir/myfile.txt' file containg the text 'mytext':

    $ dump.erofs --cat --path=/mydir/myfile.txt myimage.erofs
    mytext

Signed-off-by: Juan Hernandez <jhernand@redhat.com>
---
 dump/main.c      | 65 ++++++++++++++++++++++++++++++++++++++++++++++++
 man/dump.erofs.1 | 13 ++++++++--
 2 files changed, 76 insertions(+), 2 deletions(-)

diff --git a/dump/main.c b/dump/main.c
index 372162e..860ee5a 100644
--- a/dump/main.c
+++ b/dump/main.c
@@ -26,6 +26,7 @@ struct erofsdump_cfg {
 	bool show_superblock;
 	bool show_statistics;
 	bool show_subdirectories;
+	bool show_file_content;
 	erofs_nid_t nid;
 	const char *inode_path;
 };
@@ -80,6 +81,7 @@ static struct option long_options[] = {
 	{"path", required_argument, NULL, 4},
 	{"ls", no_argument, NULL, 5},
 	{"offset", required_argument, NULL, 6},
+	{"cat", no_argument, NULL, 7},
 	{0, 0, 0, 0},
 };
 
@@ -123,6 +125,7 @@ static void usage(int argc, char **argv)
 		" -s              show information about superblock\n"
 		" --device=X      specify an extra device to be used together\n"
 		" --ls            show directory contents (INODE required)\n"
+		" --cat           show file contents (INODE required)\n"
 		" --nid=#         show the target inode info of nid #\n"
 		" --offset=#      skip # bytes at the beginning of IMAGE\n"
 		" --path=X        show the target inode info of path X\n",
@@ -186,6 +189,9 @@ static int erofsdump_parse_options_cfg(int argc, char **argv)
 				return -EINVAL;
 			}
 			break;
+		case 7:
+			dumpcfg.show_file_content = true;
+			break;
 		default:
 			return -EINVAL;
 		}
@@ -672,6 +678,56 @@ static void erofsdump_show_superblock(void)
 			uuid_str);
 }
 
+static void erofsdump_show_file_content(void)
+{
+	int err;
+	struct erofs_inode inode = { .sbi = &g_sbi, .nid = dumpcfg.nid };
+	size_t buffer_size;
+	char *buffer_ptr;
+	erofs_off_t pending_size;
+	erofs_off_t read_offset;
+	erofs_off_t read_size;
+
+	if (dumpcfg.inode_path) {
+		err = erofs_ilookup(dumpcfg.inode_path, &inode);
+		if (err) {
+			erofs_err("read inode failed @ %s", dumpcfg.inode_path);
+			return;
+		}
+	} else {
+		err = erofs_read_inode_from_disk(&inode);
+		if (err) {
+			erofs_err("read inode failed @ nid %llu", inode.nid | 0ULL);
+			return;
+		}
+	}
+
+	buffer_size = erofs_blksiz(inode.sbi);
+	buffer_ptr = malloc(buffer_size);
+	if (!buffer_ptr) {
+		erofs_err("buffer allocation failed @ nid %llu", inode.nid | 0ULL);
+		return;
+	}
+
+	pending_size = inode.i_size;
+	read_offset = 0;
+	while (pending_size > 0) {
+		read_size = pending_size > buffer_size? buffer_size: pending_size;
+		err = erofs_pread(&inode, buffer_ptr, read_size, read_offset);
+		if (err) {
+			erofs_err("read file failed @ nid %llu", inode.nid | 0ULL);
+			goto out;
+		}
+		pending_size -= read_size;
+		read_offset += read_size;
+		fwrite(buffer_ptr, read_size, 1, stdout);
+	}
+	fflush(stdout);
+
+out:
+	free(buffer_ptr);
+}
+
 int main(int argc, char **argv)
 {
 	int err;
@@ -696,6 +752,15 @@ int main(int argc, char **argv)
 		goto exit_dev_close;
 	}
 
+	if (dumpcfg.show_file_content) {
+		if (dumpcfg.show_superblock || dumpcfg.show_statistics || dumpcfg.show_subdirectories) {
+			fprintf(stderr, "The '--cat' flag is incompatible with '-S', '-e', '-s' and '--ls'.\n");
+			goto exit_dev_close;
+		}
+		erofsdump_show_file_content();
+		goto exit_dev_close;
+	}
+
 	if (!dumpcfg.totalshow) {
 		dumpcfg.show_superblock = true;
 		dumpcfg.totalshow = 1;
diff --git a/man/dump.erofs.1 b/man/dump.erofs.1
index 6237ead..ec823ec 100644
--- a/man/dump.erofs.1
+++ b/man/dump.erofs.1
@@ -8,7 +8,7 @@ or overall disk statistics information from an EROFS-formatted image.
 \fBdump.erofs\fR [\fIOPTIONS\fR] \fIIMAGE\fR
 .SH DESCRIPTION
 .B dump.erofs
-is used to retrieve erofs metadata from \fIIMAGE\fP and demonstrate
+is used to retrieve erofs metadata and data from \fIIMAGE\fP and demonstrate
 .br
 1) overall disk statistics,
 .br
@@ -16,7 +16,9 @@ is used to retrieve erofs metadata from \fIIMAGE\fP and demonstrate
 .br
 3) file information of the given inode NID,
 .br
-4) file extent information of the given inode NID.
+4) file extent information of the given inode NID,
+.br
+5) file content for the given inode NID.
 .SH OPTIONS
 .TP
 .BI "\-\-device=" path
@@ -32,6 +34,13 @@ or
 .I path
 required.
 .TP
+.BI "\-\-cat"
+Write file content to standard output.
+.I NID
+or
+.I path
+required.
+.TP
 .BI "\-\-nid=" NID
 Specify an inode NID in order to print its file information.
 .TP
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] erofs-utils: dump: Add --cat flag to show file contents
  2025-01-09 10:56     ` Juan Hernandez
@ 2025-01-09 12:56       ` Gao Xiang via Linux-erofs
  0 siblings, 0 replies; 5+ messages in thread
From: Gao Xiang via Linux-erofs @ 2025-01-09 12:56 UTC (permalink / raw)
  To: Juan Hernandez; +Cc: linux-erofs

On Thu, Jan 09, 2025 at 11:56:11AM +0100, Juan Hernandez wrote:
> This patch adds a new '--cat' flag to the 'dump.erofs' command. When
> used it will write to the standard output the content of the file
> indicated by the '--path' or '--nid' options. For example, if there is a
> '/mydir/myfile.txt' file containg the text 'mytext':
> 
>     $ dump.erofs --cat --path=/mydir/myfile.txt myimage.erofs
>     mytext
> 
> Signed-off-by: Juan Hernandez <jhernand@redhat.com>

Thanks! Applied now for testing.

Thanks,
Gao Xiang

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-01-09 12:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-09  9:55 [PATCH] erofs-utils: dump: Add --cat flag to show file contents Juan Hernandez
2025-01-09 10:37 ` Gao Xiang
2025-01-09 10:49   ` Juan Hernández
2025-01-09 10:56     ` Juan Hernandez
2025-01-09 12:56       ` Gao Xiang via Linux-erofs

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.