linux-f2fs-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
* [f2fs-dev] [PATCH] f2fs_io: change fibmap to fiemap
@ 2020-09-01  3:36 Daeho Jeong
  2020-09-03  1:15 ` Chao Yu
  0 siblings, 1 reply; 3+ messages in thread
From: Daeho Jeong @ 2020-09-01  3:36 UTC (permalink / raw)
  To: linux-f2fs-devel; +Cc: Daeho Jeong

From: Daeho Jeong <daehojeong@google.com>

Currently we support fiemap command using fibmap. It's simple and
easy to use, but we cannot use this for compressed file. To support
more different types of files, we need to change this to use fiemap.

Signed-off-by: Daeho Jeong <daehojeong@google.com>
---
 tools/f2fs_io/f2fs_io.c | 56 ++++++++++++++++++++++++++++-------------
 1 file changed, 39 insertions(+), 17 deletions(-)

diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c
index abb655a..fc81b93 100644
--- a/tools/f2fs_io/f2fs_io.c
+++ b/tools/f2fs_io/f2fs_io.c
@@ -631,27 +631,42 @@ static void do_randread(int argc, char **argv, const struct cmd_desc *cmd)
 	exit(0);
 }
 
-struct file_ext {
-	__u32 f_pos;
-	__u32 start_blk;
-	__u32 end_blk;
-	__u32 blk_count;
+struct fiemap_extent {
+	__u64 fe_logical;
+	__u64 fe_physical;
+	__u64 fe_length;
+	__u64 fe_reserved64[2];
+	__u32 fe_flags;
+	__u32 fe_reserved[3];
 };
 
-#ifndef FIBMAP
-#define FIBMAP          _IO(0x00, 1)    /* bmap access */
+struct fiemap {
+	__u64 fm_start;
+	__u64 fm_length;
+	__u32 fm_flags;
+	__u32 fm_mapped_extents;
+	__u32 fm_extent_count;
+	__u32 fm_reserved;
+	struct fiemap_extent fm_extent[0];
+};
+
+#ifndef FIEMAP
+#define FIEMAP		_IOWR('f', 11, struct fiemap)
 #endif
 
+#define NEW_ADDR	0xFFFFFFFF
+
 #define fiemap_desc "get block address in file"
 #define fiemap_help					\
 "f2fs_io fiemap [offset in 4kb] [count] [file_path]\n\n"\
 
 static void do_fiemap(int argc, char **argv, const struct cmd_desc *cmd)
 {
-	u64 offset;
-	u32 blknum;
 	unsigned count, i;
 	int fd;
+	__u64 phy_addr;
+	struct fiemap *fm = xmalloc(sizeof(struct fiemap) +
+			sizeof(struct fiemap_extent));
 
 	if (argc != 4) {
 		fputs("Excess arguments\n\n", stderr);
@@ -659,21 +674,28 @@ static void do_fiemap(int argc, char **argv, const struct cmd_desc *cmd)
 		exit(1);
 	}
 
-	offset = atoi(argv[1]);
+	fm->fm_start = atoi(argv[1]) * 4096;
+	fm->fm_length = 4096;
+	fm->fm_extent_count = 1;
 	count = atoi(argv[2]);
 
 	fd = xopen(argv[3], O_RDONLY | O_LARGEFILE, 0);
 
-	printf("Fiemap: offset = %08"PRIx64" len = %d\n", offset, count);
+	printf("Fiemap: offset = %08"PRIx64" len = %d\n",
+						fm->fm_start / 4096, count);
 	for (i = 0; i < count; i++) {
-		blknum = offset + i;
-
-		if (ioctl(fd, FIBMAP, &blknum) < 0)
-			die_errno("FIBMAP failed");
-
-		printf("%u ", blknum);
+		if (ioctl(fd, FIEMAP, fm) < 0)
+			die_errno("FIEMAP failed");
+
+		phy_addr = fm->fm_extent[0].fe_physical / 4096;
+		if (phy_addr == NEW_ADDR)
+			printf("NEW_ADDR ");
+		else
+			printf("%llu ", phy_addr);
+		fm->fm_start += 4096;
 	}
 	printf("\n");
+	free(fm);
 	exit(0);
 }
 
-- 
2.28.0.402.g5ffc5be6b7-goog



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

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

* Re: [f2fs-dev] [PATCH] f2fs_io: change fibmap to fiemap
  2020-09-01  3:36 [f2fs-dev] [PATCH] f2fs_io: change fibmap to fiemap Daeho Jeong
@ 2020-09-03  1:15 ` Chao Yu
  2020-09-03  1:41   ` Daeho Jeong
  0 siblings, 1 reply; 3+ messages in thread
From: Chao Yu @ 2020-09-03  1:15 UTC (permalink / raw)
  To: Daeho Jeong, linux-f2fs-devel; +Cc: Daeho Jeong

On 2020/9/1 11:36, Daeho Jeong wrote:
> From: Daeho Jeong <daehojeong@google.com>
> 
> Currently we support fiemap command using fibmap. It's simple and
> easy to use, but we cannot use this for compressed file. To support
> more different types of files, we need to change this to use fiemap.
> 
> Signed-off-by: Daeho Jeong <daehojeong@google.com>
> ---
>   tools/f2fs_io/f2fs_io.c | 56 ++++++++++++++++++++++++++++-------------
>   1 file changed, 39 insertions(+), 17 deletions(-)
> 
> diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c
> index abb655a..fc81b93 100644
> --- a/tools/f2fs_io/f2fs_io.c
> +++ b/tools/f2fs_io/f2fs_io.c
> @@ -631,27 +631,42 @@ static void do_randread(int argc, char **argv, const struct cmd_desc *cmd)
>   	exit(0);
>   }
>   
> -struct file_ext {
> -	__u32 f_pos;
> -	__u32 start_blk;
> -	__u32 end_blk;
> -	__u32 blk_count;
> +struct fiemap_extent {
> +	__u64 fe_logical;
> +	__u64 fe_physical;
> +	__u64 fe_length;
> +	__u64 fe_reserved64[2];
> +	__u32 fe_flags;
> +	__u32 fe_reserved[3];
>   };
>   
> -#ifndef FIBMAP
> -#define FIBMAP          _IO(0x00, 1)    /* bmap access */
> +struct fiemap {
> +	__u64 fm_start;
> +	__u64 fm_length;
> +	__u32 fm_flags;
> +	__u32 fm_mapped_extents;
> +	__u32 fm_extent_count;
> +	__u32 fm_reserved;
> +	struct fiemap_extent fm_extent[0];
> +};
> +
> +#ifndef FIEMAP
> +#define FIEMAP		_IOWR('f', 11, struct fiemap)
>   #endif
>   
> +#define NEW_ADDR	0xFFFFFFFF
> +
>   #define fiemap_desc "get block address in file"
>   #define fiemap_help					\
>   "f2fs_io fiemap [offset in 4kb] [count] [file_path]\n\n"\
>   
>   static void do_fiemap(int argc, char **argv, const struct cmd_desc *cmd)
>   {
> -	u64 offset;
> -	u32 blknum;
>   	unsigned count, i;
>   	int fd;
> +	__u64 phy_addr;
> +	struct fiemap *fm = xmalloc(sizeof(struct fiemap) +
> +			sizeof(struct fiemap_extent));
>   
>   	if (argc != 4) {
>   		fputs("Excess arguments\n\n", stderr);
> @@ -659,21 +674,28 @@ static void do_fiemap(int argc, char **argv, const struct cmd_desc *cmd)
>   		exit(1);
>   	}
>   
> -	offset = atoi(argv[1]);
> +	fm->fm_start = atoi(argv[1]) * 4096;
> +	fm->fm_length = 4096;

F2FS_BLKSIZE

> +	fm->fm_extent_count = 1;
>   	count = atoi(argv[2]);
>   
>   	fd = xopen(argv[3], O_RDONLY | O_LARGEFILE, 0);
>   
> -	printf("Fiemap: offset = %08"PRIx64" len = %d\n", offset, count);
> +	printf("Fiemap: offset = %08"PRIx64" len = %d\n",
> +						fm->fm_start / 4096, count);

F2FS_BLKSIZE

>   	for (i = 0; i < count; i++) {
> -		blknum = offset + i;
> -
> -		if (ioctl(fd, FIBMAP, &blknum) < 0)
> -			die_errno("FIBMAP failed");
> -
> -		printf("%u ", blknum);
> +		if (ioctl(fd, FIEMAP, fm) < 0)
> +			die_errno("FIEMAP failed");
> +
> +		phy_addr = fm->fm_extent[0].fe_physical / 4096;

F2FS_BLKSIZE

> +		if (phy_addr == NEW_ADDR)
> +			printf("NEW_ADDR ");
> +		else
> +			printf("%llu ", phy_addr);
> +		fm->fm_start += 4096;

F2FS_BLKSIZE

>   	}
>   	printf("\n");
> +	free(fm);
>   	exit(0);
>   }
>   
> 


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

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

* Re: [f2fs-dev] [PATCH] f2fs_io: change fibmap to fiemap
  2020-09-03  1:15 ` Chao Yu
@ 2020-09-03  1:41   ` Daeho Jeong
  0 siblings, 0 replies; 3+ messages in thread
From: Daeho Jeong @ 2020-09-03  1:41 UTC (permalink / raw)
  To: Chao Yu; +Cc: Daeho Jeong, linux-f2fs-devel

Yes, I just was searching for that, but failed.

Thanks,

2020년 9월 3일 (목) 오전 10:15, Chao Yu <yuchao0@huawei.com>님이 작성:
>
> On 2020/9/1 11:36, Daeho Jeong wrote:
> > From: Daeho Jeong <daehojeong@google.com>
> >
> > Currently we support fiemap command using fibmap. It's simple and
> > easy to use, but we cannot use this for compressed file. To support
> > more different types of files, we need to change this to use fiemap.
> >
> > Signed-off-by: Daeho Jeong <daehojeong@google.com>
> > ---
> >   tools/f2fs_io/f2fs_io.c | 56 ++++++++++++++++++++++++++++-------------
> >   1 file changed, 39 insertions(+), 17 deletions(-)
> >
> > diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c
> > index abb655a..fc81b93 100644
> > --- a/tools/f2fs_io/f2fs_io.c
> > +++ b/tools/f2fs_io/f2fs_io.c
> > @@ -631,27 +631,42 @@ static void do_randread(int argc, char **argv, const struct cmd_desc *cmd)
> >       exit(0);
> >   }
> >
> > -struct file_ext {
> > -     __u32 f_pos;
> > -     __u32 start_blk;
> > -     __u32 end_blk;
> > -     __u32 blk_count;
> > +struct fiemap_extent {
> > +     __u64 fe_logical;
> > +     __u64 fe_physical;
> > +     __u64 fe_length;
> > +     __u64 fe_reserved64[2];
> > +     __u32 fe_flags;
> > +     __u32 fe_reserved[3];
> >   };
> >
> > -#ifndef FIBMAP
> > -#define FIBMAP          _IO(0x00, 1)    /* bmap access */
> > +struct fiemap {
> > +     __u64 fm_start;
> > +     __u64 fm_length;
> > +     __u32 fm_flags;
> > +     __u32 fm_mapped_extents;
> > +     __u32 fm_extent_count;
> > +     __u32 fm_reserved;
> > +     struct fiemap_extent fm_extent[0];
> > +};
> > +
> > +#ifndef FIEMAP
> > +#define FIEMAP               _IOWR('f', 11, struct fiemap)
> >   #endif
> >
> > +#define NEW_ADDR     0xFFFFFFFF
> > +
> >   #define fiemap_desc "get block address in file"
> >   #define fiemap_help                                 \
> >   "f2fs_io fiemap [offset in 4kb] [count] [file_path]\n\n"\
> >
> >   static void do_fiemap(int argc, char **argv, const struct cmd_desc *cmd)
> >   {
> > -     u64 offset;
> > -     u32 blknum;
> >       unsigned count, i;
> >       int fd;
> > +     __u64 phy_addr;
> > +     struct fiemap *fm = xmalloc(sizeof(struct fiemap) +
> > +                     sizeof(struct fiemap_extent));
> >
> >       if (argc != 4) {
> >               fputs("Excess arguments\n\n", stderr);
> > @@ -659,21 +674,28 @@ static void do_fiemap(int argc, char **argv, const struct cmd_desc *cmd)
> >               exit(1);
> >       }
> >
> > -     offset = atoi(argv[1]);
> > +     fm->fm_start = atoi(argv[1]) * 4096;
> > +     fm->fm_length = 4096;
>
> F2FS_BLKSIZE
>
> > +     fm->fm_extent_count = 1;
> >       count = atoi(argv[2]);
> >
> >       fd = xopen(argv[3], O_RDONLY | O_LARGEFILE, 0);
> >
> > -     printf("Fiemap: offset = %08"PRIx64" len = %d\n", offset, count);
> > +     printf("Fiemap: offset = %08"PRIx64" len = %d\n",
> > +                                             fm->fm_start / 4096, count);
>
> F2FS_BLKSIZE
>
> >       for (i = 0; i < count; i++) {
> > -             blknum = offset + i;
> > -
> > -             if (ioctl(fd, FIBMAP, &blknum) < 0)
> > -                     die_errno("FIBMAP failed");
> > -
> > -             printf("%u ", blknum);
> > +             if (ioctl(fd, FIEMAP, fm) < 0)
> > +                     die_errno("FIEMAP failed");
> > +
> > +             phy_addr = fm->fm_extent[0].fe_physical / 4096;
>
> F2FS_BLKSIZE
>
> > +             if (phy_addr == NEW_ADDR)
> > +                     printf("NEW_ADDR ");
> > +             else
> > +                     printf("%llu ", phy_addr);
> > +             fm->fm_start += 4096;
>
> F2FS_BLKSIZE
>
> >       }
> >       printf("\n");
> > +     free(fm);
> >       exit(0);
> >   }
> >
> >


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

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

end of thread, other threads:[~2020-09-03  1:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-01  3:36 [f2fs-dev] [PATCH] f2fs_io: change fibmap to fiemap Daeho Jeong
2020-09-03  1:15 ` Chao Yu
2020-09-03  1:41   ` Daeho Jeong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).