fibmap.f2fs: add bdev information

This patch shows devname and start_lba based on zero sector.
fibmap reports related lba, sometimes we want to know absolute lba of
file to compare with blktrace.

Signed-off-by: Changman Lee <cm224.lee@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
This commit is contained in:
Changman Lee 2014-01-16 12:01:27 +09:00 committed by Jaegeuk Kim
parent e296161af0
commit b611e1155a

View File

@ -7,6 +7,8 @@
#include <errno.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <libgen.h>
#include <linux/hdreg.h>
#include <linux/types.h>
#include <linux/fs.h>
@ -41,6 +43,42 @@ void print_stat(struct stat64 *st)
printf("--------------------------------------------\n\n");
}
void stat_bdev(struct stat64 *st, unsigned int *start_lba)
{
struct stat bdev_stat;
struct hd_geometry geom;
char devname[32] = { 0, };
char linkname[32] = { 0, };
int fd;
sprintf(devname, "/dev/block/%d:%d", major(st->st_dev), minor(st->st_dev));
fd = open(devname, O_RDONLY);
if (fd < 0)
return;
if (fstat(fd, &bdev_stat) < 0)
goto out;
if (S_ISBLK(bdev_stat.st_mode)) {
if (ioctl(fd, HDIO_GETGEO, &geom) < 0)
*start_lba = 0;
else
*start_lba = geom.start;
}
if (readlink(devname, linkname, sizeof(linkname)) < 0)
goto out;
printf("----------------bdev info-------------------\n");
printf("devname = %s\n", basename(linkname));
printf("start_lba = %u\n", *start_lba);
out:
close(fd);
}
int main(int argc, char *argv[])
{
int fd;
@ -50,6 +88,7 @@ int main(int argc, char *argv[])
int total_blks;
unsigned int i;
struct file_ext ext;
__u32 start_lba;
__u32 blknum;
if (argc != 2) {
@ -73,9 +112,12 @@ int main(int argc, char *argv[])
goto out;
}
stat_bdev(&st, &start_lba);
total_blks = (st.st_size + st.st_blksize - 1) / st.st_blksize;
printf("\n%s :\n", filename);
printf("\n----------------file info-------------------\n");
printf("%s :\n", filename);
print_stat(&st);
printf("file_pos start_blk end_blk blks\n");