[please note that I'm not subscribed to the list] Hi again, this patch adds support for the NILFS2 (http://www.nilfs.org/) filesystem to fstype (on top of 1.5.7 from the debian package). Please let me know what you think. (please note that I'm not affiliated to nilfs in any way). diff -Nur klibc-1.5.7.orig/usr/kinit/fstype/fstype.c klibc-1.5.7/usr/kinit/fstype/fstype.c --- klibc-1.5.7.orig/usr/kinit/fstype/fstype.c 2007-09-04 09:17:12.000000000 +0100 +++ klibc-1.5.7/usr/kinit/fstype/fstype.c 2008-03-03 16:57:34.522813138 +0000 @@ -33,6 +33,7 @@ #include "squashfs_fs.h" #include "gfs2_fs.h" #include "ocfs2_fs.h" +#include "nilfs_fs.h" /* * Slightly cleaned up version of jfs_superblock to @@ -326,6 +327,19 @@ return 0; } +static int nilfs2_image(const void *buf, unsigned long long *bytes) +{ + const struct nilfs_super_block *sb + (const struct nilfs_super_block *)buf; + + if (sb->s_magic == __cpu_to_le16(NILFS_SUPER_MAGIC) && + sb->s_rev_level == __cpu_to_le32(2)) { + *bytes = (unsigned long long)__le64_to_cpu(sb->s_dev_size); + return 1; + } + return 0; +} + struct imagetype { off_t block; const char name[12]; @@ -354,6 +368,7 @@ {1, "ext3", ext3_image}, {1, "ext2", ext2_image}, {1, "minix", minix_image}, + {1, "nilfs2", nilfs2_image}, {2, "ocfs2", ocfs2_image}, {8, "reiserfs", reiserfs_image}, {64, "reiserfs", reiserfs_image}, diff -Nur klibc-1.5.7.orig/usr/kinit/fstype/nilfs_fs.h klibc-1.5.7/usr/kinit/fstype/nilfs_fs.h --- klibc-1.5.7.orig/usr/kinit/fstype/nilfs_fs.h 1970-01-01 01:00:00.000000000 +0100 +++ klibc-1.5.7/usr/kinit/fstype/nilfs_fs.h 2008-03-03 16:20:38.978853012 +0000 @@ -0,0 +1,65 @@ +#ifndef __NILFS_FS_H +#define __NILFS_FS_H + +#define NILFS_SUPER_MAGIC 0x3434 /* NILFS filesystem magic number */ + +/* + * struct nilfs_super_block - structure of super block on disk + */ +struct nilfs_super_block { + __le32 s_rev_level; /* Revision level */ + __le16 s_minor_rev_level; /* minor revision level */ + __le16 s_magic; /* Magic signature */ + + __le16 s_bytes; /* Bytes count of CRC calculation + for this structure. s_reserved + is excluded. */ + __le16 s_flags; /* flags */ + __le32 s_crc_seed; /* Seed value of CRC calculation */ + __le32 s_sum; /* Check sum of super block */ + + __le32 s_log_block_size; /* Block size represented as follows + blocksize = 1 << (s_log_block_size + 10) */ + __le64 s_nsegments; /* Number of segments in filesystem */ + __le64 s_dev_size; /* block device size in bytes */ + __le64 s_first_data_block; /* 1st seg disk block number */ + __le32 s_blocks_per_segment; /* number of blocks per full segment */ + __le32 s_r_segments_percentage;/* Reserved segments percentage */ /* or __le16 */ + + __le64 s_last_cno; /* Last checkpoint number */ + __le64 s_last_pseg; /* disk block addr pseg written last */ + __le64 s_last_seq; /* seq. number of seg written last */ + __le64 s_free_blocks_count; /* Free blocks count */ + + __le64 s_ctime; /* Creation time (execution time of newfs) */ + __le64 s_mtime; /* Mount time */ + __le64 s_wtime; /* Write time */ + __le16 s_mnt_count; /* Mount count */ + __le16 s_max_mnt_count; /* Maximal mount count */ + __le16 s_state; /* File system state */ + __le16 s_errors; /* Behaviour when detecting errors */ + __le64 s_lastcheck; /* time of last check */ + + __le32 s_checkinterval; /* max. time between checks */ + __le32 s_creator_os; /* OS */ + __le16 s_def_resuid; /* Default uid for reserved blocks */ + __le16 s_def_resgid; /* Default gid for reserved blocks */ + __le32 s_first_ino; /* First non-reserved inode */ /* or __le16 */ + + __le16 s_inode_size; /* Size of an inode */ + __le16 s_dat_entry_size; /* Size of a dat entry */ + __le16 s_checkpoint_size; /* Size of a checkpoint */ + __le16 s_segment_usage_size; /* Size of a segment usage */ + + __u8 s_uuid[16]; /* 128-bit uuid for volume */ + char s_volume_name[16]; /* volume name */ + char s_last_mounted[64]; /* directory where last mounted */ + + __le32 s_c_interval; /* Commit interval of segment */ + __le32 s_c_block_max; /* Threshold of data amount for + the segment construction */ + __u32 s_reserved[192]; /* padding to the end of the block */ +}; + +#endif /* __NILFS_FS_H */ + HTH, Stephane