aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2015-05-23 20:36:50 -0700
committerJeff Sharkey <jsharkey@android.com>2015-05-28 13:12:58 -0700
commitb2cc45fe711dc42c8c0444584b2513ac59b3ad3b (patch)
treec51eaf9e3b75f5ab82f248a478f9edaf764f7144
parentce5b6554b9d44e081e7c1f80d430188c23d86835 (diff)
downloadandroid_external_e2fsprogs-b2cc45fe711dc42c8c0444584b2513ac59b3ad3b.tar.gz
android_external_e2fsprogs-b2cc45fe711dc42c8c0444584b2513ac59b3ad3b.tar.bz2
android_external_e2fsprogs-b2cc45fe711dc42c8c0444584b2513ac59b3ad3b.zip
Add f2fs to blkid.
We can now identify f2fs filesystems and extract the UUID. Bug: 20275581 Change-Id: I55f7b8aa6647913bd45f02a8e9eea18ca3c53939
-rw-r--r--lib/blkid/probe.c13
-rw-r--r--lib/blkid/probe.h36
2 files changed, 49 insertions, 0 deletions
diff --git a/lib/blkid/probe.c b/lib/blkid/probe.c
index 84649df2..8215768d 100644
--- a/lib/blkid/probe.c
+++ b/lib/blkid/probe.c
@@ -1386,6 +1386,18 @@ static int probe_btrfs(struct blkid_probe *probe,
set_uuid(probe->dev, bs->fsid, 0);
return 0;
}
+
+static int probe_f2fs(struct blkid_probe *probe,
+ struct blkid_magic *id,
+ unsigned char *buf)
+{
+ struct f2fs_super_block *bs;
+
+ bs = (struct f2fs_super_block *)buf;
+ set_uuid(probe->dev, bs->uuid, 0);
+ return 0;
+}
+
/*
* Various filesystem magics that we can check for. Note that kboff and
* sboff are in kilobytes and bytes respectively. All magics are in
@@ -1485,6 +1497,7 @@ static struct blkid_magic type_array[] = {
{ "lvm2pv", 1, 0x018, 8, "LVM2 001", probe_lvm2 },
{ "lvm2pv", 1, 0x218, 8, "LVM2 001", probe_lvm2 },
{ "btrfs", 64, 0x40, 8, "_BHRfS_M", probe_btrfs },
+ { "f2fs", 1, 0, 4, "\x10\x20\xf5\xf2", probe_f2fs },
{ NULL, 0, 0, 0, NULL, NULL }
};
diff --git a/lib/blkid/probe.h b/lib/blkid/probe.h
index 37e80eff..8eef37e4 100644
--- a/lib/blkid/probe.h
+++ b/lib/blkid/probe.h
@@ -726,6 +726,42 @@ struct btrfs_super_block {
__u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE];
} __attribute__ ((__packed__));
+#define F2FS_MAX_EXTENSION 64 /* # of extension entries */
+
+struct f2fs_super_block {
+ __u32 magic; /* Magic Number */
+ __u16 major_ver; /* Major Version */
+ __u16 minor_ver; /* Minor Version */
+ __u32 log_sectorsize; /* log2 sector size in bytes */
+ __u32 log_sectors_per_block; /* log2 # of sectors per block */
+ __u32 log_blocksize; /* log2 block size in bytes */
+ __u32 log_blocks_per_seg; /* log2 # of blocks per segment */
+ __u32 segs_per_sec; /* # of segments per section */
+ __u32 secs_per_zone; /* # of sections per zone */
+ __u32 checksum_offset; /* checksum offset inside super block */
+ __u64 block_count; /* total # of user blocks */
+ __u32 section_count; /* total # of sections */
+ __u32 segment_count; /* total # of segments */
+ __u32 segment_count_ckpt; /* # of segments for checkpoint */
+ __u32 segment_count_sit; /* # of segments for SIT */
+ __u32 segment_count_nat; /* # of segments for NAT */
+ __u32 segment_count_ssa; /* # of segments for SSA */
+ __u32 segment_count_main; /* # of segments for main area */
+ __u32 segment0_blkaddr; /* start block address of segment 0 */
+ __u32 cp_blkaddr; /* start block address of checkpoint */
+ __u32 sit_blkaddr; /* start block address of SIT */
+ __u32 nat_blkaddr; /* start block address of NAT */
+ __u32 ssa_blkaddr; /* start block address of SSA */
+ __u32 main_blkaddr; /* start block address of main area */
+ __u32 root_ino; /* root inode number */
+ __u32 node_ino; /* node inode number */
+ __u32 meta_ino; /* meta inode number */
+ __u8 uuid[16]; /* 128-bit uuid for volume */
+ __u16 volume_name[512]; /* volume name */
+ __u32 extension_count; /* # of extensions below */
+ __u8 extension_list[F2FS_MAX_EXTENSION][8]; /* extension array */
+} __attribute__((__packed__));
+
/*
* Byte swap functions
*/