All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] erofs-utils: fuse: support offset when read image
@ 2022-07-11  2:47 Li He
  2022-07-11  3:52 ` Gao Xiang
  0 siblings, 1 reply; 4+ messages in thread
From: Li He @ 2022-07-11  2:47 UTC (permalink / raw)
  To: linux-erofs

Add --offset to erofsfuse to skip bytes at the start of the image file.

Signed-off-by: Li He <lihe@uniontech.com>
---
 fuse/main.c            | 6 ++++++
 include/erofs/config.h | 3 +++
 lib/io.c               | 2 ++
 3 files changed, 11 insertions(+)

diff --git a/fuse/main.c b/fuse/main.c
index f4c2476..a2a6449 100644
--- a/fuse/main.c
+++ b/fuse/main.c
@@ -151,6 +151,7 @@ static struct fuse_operations erofs_ops = {
 static struct options {
 	const char *disk;
 	const char *mountpoint;
+	u64 offset;
 	unsigned int debug_lvl;
 	bool show_help;
 	bool odebug;
@@ -158,6 +159,7 @@ static struct options {
 
 #define OPTION(t, p) { t, offsetof(struct options, p), 1 }
 static const struct fuse_opt option_spec[] = {
+	OPTION("--offset=%lu", offset),
 	OPTION("--dbglevel=%u", debug_lvl),
 	OPTION("--help", show_help),
 	FUSE_OPT_KEY("--device=", 1),
@@ -170,6 +172,7 @@ static void usage(void)
 
 	fputs("usage: [options] IMAGE MOUNTPOINT\n\n"
 	      "Options:\n"
+	      "    --offset=#             # bytes to skip when read IMAGE\n"
 	      "    --dbglevel=#           set output message level to # (maximum 9)\n"
 	      "    --device=#             specify an extra device to be used together\n"
 #if FUSE_MAJOR_VERSION < 3
@@ -190,6 +193,7 @@ static void usage(void)
 static void erofsfuse_dumpcfg(void)
 {
 	erofs_dump("disk: %s\n", fusecfg.disk);
+	erofs_dump("offset: %lu\n", fusecfg.offset);
 	erofs_dump("mountpoint: %s\n", fusecfg.mountpoint);
 	erofs_dump("dbglevel: %u\n", cfg.c_dbg_lvl);
 }
@@ -279,6 +283,8 @@ int main(int argc, char *argv[])
 	if (fusecfg.odebug && cfg.c_dbg_lvl < EROFS_DBG)
 		cfg.c_dbg_lvl = EROFS_DBG;
 
+	cfg.c_offset = fusecfg.offset;
+
 	erofsfuse_dumpcfg();
 	ret = dev_open_ro(fusecfg.disk);
 	if (ret) {
diff --git a/include/erofs/config.h b/include/erofs/config.h
index 0d0916c..8b6f7db 100644
--- a/include/erofs/config.h
+++ b/include/erofs/config.h
@@ -73,6 +73,9 @@ struct erofs_configure {
 	char *fs_config_file;
 	char *block_list_file;
 #endif
+
+	/* offset when read mutli partiton image */
+	u64 c_offset;
 };
 
 extern struct erofs_configure cfg;
diff --git a/lib/io.c b/lib/io.c
index 9c663c5..524cfb4 100644
--- a/lib/io.c
+++ b/lib/io.c
@@ -261,6 +261,8 @@ int dev_read(int device_id, void *buf, u64 offset, size_t len)
 	if (cfg.c_dry_run)
 		return 0;
 
+	offset += cfg.c_offset;
+
 	if (!buf) {
 		erofs_err("buf is NULL");
 		return -EINVAL;
-- 
2.20.1




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

* Re: [PATCH] erofs-utils: fuse: support offset when read image
  2022-07-11  2:47 [PATCH] erofs-utils: fuse: support offset when read image Li He
@ 2022-07-11  3:52 ` Gao Xiang
  2022-07-11  8:54   ` Li He
  0 siblings, 1 reply; 4+ messages in thread
From: Gao Xiang @ 2022-07-11  3:52 UTC (permalink / raw)
  To: Li He; +Cc: linux-erofs

Hi He,

On Mon, Jul 11, 2022 at 10:47:17AM +0800, Li He wrote:
> Add --offset to erofsfuse to skip bytes at the start of the image file.
> 
> Signed-off-by: Li He <lihe@uniontech.com>

Thanks for the patch! The patch roughly looks good to me,
some nit as below..

> ---
>  fuse/main.c            | 6 ++++++
>  include/erofs/config.h | 3 +++
>  lib/io.c               | 2 ++
>  3 files changed, 11 insertions(+)
> 
> diff --git a/fuse/main.c b/fuse/main.c
> index f4c2476..a2a6449 100644
> --- a/fuse/main.c
> +++ b/fuse/main.c
> @@ -151,6 +151,7 @@ static struct fuse_operations erofs_ops = {
>  static struct options {
>  	const char *disk;
>  	const char *mountpoint;
> +	u64 offset;

We can use cfg.c_offset directly instead it seems?

>  	unsigned int debug_lvl;
>  	bool show_help;
>  	bool odebug;
> @@ -158,6 +159,7 @@ static struct options {
>  
>  #define OPTION(t, p) { t, offsetof(struct options, p), 1 }
>  static const struct fuse_opt option_spec[] = {
> +	OPTION("--offset=%lu", offset),
>  	OPTION("--dbglevel=%u", debug_lvl),
>  	OPTION("--help", show_help),
>  	FUSE_OPT_KEY("--device=", 1),
> @@ -170,6 +172,7 @@ static void usage(void)
>  
>  	fputs("usage: [options] IMAGE MOUNTPOINT\n\n"
>  	      "Options:\n"
> +	      "    --offset=#             # bytes to skip when read IMAGE\n"

need to update manpage as well...

Thanks,
Gao Xiang

>  	      "    --dbglevel=#           set output message level to # (maximum 9)\n"
>  	      "    --device=#             specify an extra device to be used together\n"
>  #if FUSE_MAJOR_VERSION < 3
> @@ -190,6 +193,7 @@ static void usage(void)
>  static void erofsfuse_dumpcfg(void)
>  {
>  	erofs_dump("disk: %s\n", fusecfg.disk);
> +	erofs_dump("offset: %lu\n", fusecfg.offset);
>  	erofs_dump("mountpoint: %s\n", fusecfg.mountpoint);
>  	erofs_dump("dbglevel: %u\n", cfg.c_dbg_lvl);
>  }
> @@ -279,6 +283,8 @@ int main(int argc, char *argv[])
>  	if (fusecfg.odebug && cfg.c_dbg_lvl < EROFS_DBG)
>  		cfg.c_dbg_lvl = EROFS_DBG;
>  
> +	cfg.c_offset = fusecfg.offset;
> +
>  	erofsfuse_dumpcfg();
>  	ret = dev_open_ro(fusecfg.disk);
>  	if (ret) {
> diff --git a/include/erofs/config.h b/include/erofs/config.h
> index 0d0916c..8b6f7db 100644
> --- a/include/erofs/config.h
> +++ b/include/erofs/config.h
> @@ -73,6 +73,9 @@ struct erofs_configure {
>  	char *fs_config_file;
>  	char *block_list_file;
>  #endif
> +
> +	/* offset when read mutli partiton image */
> +	u64 c_offset;
>  };
>  
>  extern struct erofs_configure cfg;
> diff --git a/lib/io.c b/lib/io.c
> index 9c663c5..524cfb4 100644
> --- a/lib/io.c
> +++ b/lib/io.c
> @@ -261,6 +261,8 @@ int dev_read(int device_id, void *buf, u64 offset, size_t len)
>  	if (cfg.c_dry_run)
>  		return 0;
>  
> +	offset += cfg.c_offset;
> +
>  	if (!buf) {
>  		erofs_err("buf is NULL");
>  		return -EINVAL;
> -- 
> 2.20.1
> 
> 

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

* [PATCH] erofs-utils: fuse: support offset when read image
  2022-07-11  3:52 ` Gao Xiang
@ 2022-07-11  8:54   ` Li He
  2022-07-11  9:51     ` Gao Xiang
  0 siblings, 1 reply; 4+ messages in thread
From: Li He @ 2022-07-11  8:54 UTC (permalink / raw)
  To: hsiangkao; +Cc: linux-erofs

Add --offset to erofsfuse to skip bytes at the start of the image file.

Signed-off-by: Li He <lihe@uniontech.com>
---
We should add offset to fuse_operations so erofsfuse can parse it from
command line. fuse_opt_parse can not parse cfg directly.

Changes since v0
+ Add manpage for erofsfuse offset option

 fuse/main.c            | 6 ++++++
 include/erofs/config.h | 3 +++
 lib/io.c               | 2 ++
 man/erofsfuse.1        | 3 +++
 4 files changed, 14 insertions(+)

diff --git a/fuse/main.c b/fuse/main.c
index f4c2476..a2a6449 100644
--- a/fuse/main.c
+++ b/fuse/main.c
@@ -151,6 +151,7 @@ static struct fuse_operations erofs_ops = {
 static struct options {
 	const char *disk;
 	const char *mountpoint;
+	u64 offset;
 	unsigned int debug_lvl;
 	bool show_help;
 	bool odebug;
@@ -158,6 +159,7 @@ static struct options {
 
 #define OPTION(t, p) { t, offsetof(struct options, p), 1 }
 static const struct fuse_opt option_spec[] = {
+	OPTION("--offset=%lu", offset),
 	OPTION("--dbglevel=%u", debug_lvl),
 	OPTION("--help", show_help),
 	FUSE_OPT_KEY("--device=", 1),
@@ -170,6 +172,7 @@ static void usage(void)
 
 	fputs("usage: [options] IMAGE MOUNTPOINT\n\n"
 	      "Options:\n"
+	      "    --offset=#             # bytes to skip when read IMAGE\n"
 	      "    --dbglevel=#           set output message level to # (maximum 9)\n"
 	      "    --device=#             specify an extra device to be used together\n"
 #if FUSE_MAJOR_VERSION < 3
@@ -190,6 +193,7 @@ static void usage(void)
 static void erofsfuse_dumpcfg(void)
 {
 	erofs_dump("disk: %s\n", fusecfg.disk);
+	erofs_dump("offset: %lu\n", fusecfg.offset);
 	erofs_dump("mountpoint: %s\n", fusecfg.mountpoint);
 	erofs_dump("dbglevel: %u\n", cfg.c_dbg_lvl);
 }
@@ -279,6 +283,8 @@ int main(int argc, char *argv[])
 	if (fusecfg.odebug && cfg.c_dbg_lvl < EROFS_DBG)
 		cfg.c_dbg_lvl = EROFS_DBG;
 
+	cfg.c_offset = fusecfg.offset;
+
 	erofsfuse_dumpcfg();
 	ret = dev_open_ro(fusecfg.disk);
 	if (ret) {
diff --git a/include/erofs/config.h b/include/erofs/config.h
index 0d0916c..8b6f7db 100644
--- a/include/erofs/config.h
+++ b/include/erofs/config.h
@@ -73,6 +73,9 @@ struct erofs_configure {
 	char *fs_config_file;
 	char *block_list_file;
 #endif
+
+	/* offset when read mutli partiton image */
+	u64 c_offset;
 };
 
 extern struct erofs_configure cfg;
diff --git a/lib/io.c b/lib/io.c
index 9c663c5..524cfb4 100644
--- a/lib/io.c
+++ b/lib/io.c
@@ -261,6 +261,8 @@ int dev_read(int device_id, void *buf, u64 offset, size_t len)
 	if (cfg.c_dry_run)
 		return 0;
 
+	offset += cfg.c_offset;
+
 	if (!buf) {
 		erofs_err("buf is NULL");
 		return -EINVAL;
diff --git a/man/erofsfuse.1 b/man/erofsfuse.1
index 9db6827..1d47163 100644
--- a/man/erofsfuse.1
+++ b/man/erofsfuse.1
@@ -26,6 +26,9 @@ warning messages.
 .BI "\-\-device=" path
 Specify an extra device to be used together.
 You may give multiple `--device' options in the correct order.
+.TP
+.BI "\-\-offset=" #
+Specify offset bytes to skip when read image file. The default is 0.
 .SS "FUSE options:"
 .TP
 \fB-d -o\fR debug
-- 
2.20.1




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

* Re: [PATCH] erofs-utils: fuse: support offset when read image
  2022-07-11  8:54   ` Li He
@ 2022-07-11  9:51     ` Gao Xiang
  0 siblings, 0 replies; 4+ messages in thread
From: Gao Xiang @ 2022-07-11  9:51 UTC (permalink / raw)
  To: Li He; +Cc: linux-erofs

On Mon, Jul 11, 2022 at 04:54:59PM +0800, Li He wrote:
> Add --offset to erofsfuse to skip bytes at the start of the image file.
> 
> Signed-off-by: Li He <lihe@uniontech.com>
> ---
> We should add offset to fuse_operations so erofsfuse can parse it from
> command line. fuse_opt_parse can not parse cfg directly.

Oh, I forgot that, looks good to me now!

Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>

Thanks,
Gao Xiang

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

end of thread, other threads:[~2022-07-11  9:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-11  2:47 [PATCH] erofs-utils: fuse: support offset when read image Li He
2022-07-11  3:52 ` Gao Xiang
2022-07-11  8:54   ` Li He
2022-07-11  9:51     ` Gao Xiang

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.