fs: Add F2FS support
"F2FS (Flash-Friendly File System) is flash-friendly file system which was merged into Linux kernel v3.8 in 2013. The motive for F2FS was to build a file system that from the start, takes into account the characteristics of NAND flash memory-based storage devices (such as solid-state disks, eMMC, and SD cards). F2FS was designed on a basis of a log-structured file system approach, which remedies some known issues of the older log structured file systems, such as the snowball effect of wandering trees and high cleaning overhead. In addition, since a NAND-based storage device shows different characteristics according to its internal geometry or flash memory management scheme (such as the Flash Translation Layer or FTL), it supports various parameters not only for configuring on-disk layout, but also for selecting allocation and cleaning algorithm.", quote by https://en.wikipedia.org/wiki/F2FS. The source codes for F2FS are available from: http://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs.git http://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git This patch has been integrated in OpenMandriva Lx 3. https://www.openmandriva.org/ Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> Signed-off-by: Pete Batard <pete@akeo.ie> Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
parent
563b1da6e6
commit
71f9e4ac44
7 changed files with 1357 additions and 5 deletions
|
@ -99,6 +99,7 @@ library = {
|
||||||
common = grub-core/fs/ext2.c;
|
common = grub-core/fs/ext2.c;
|
||||||
common = grub-core/fs/fat.c;
|
common = grub-core/fs/fat.c;
|
||||||
common = grub-core/fs/exfat.c;
|
common = grub-core/fs/exfat.c;
|
||||||
|
common = grub-core/fs/f2fs.c;
|
||||||
common = grub-core/fs/fshelp.c;
|
common = grub-core/fs/fshelp.c;
|
||||||
common = grub-core/fs/hfs.c;
|
common = grub-core/fs/hfs.c;
|
||||||
common = grub-core/fs/hfsplus.c;
|
common = grub-core/fs/hfsplus.c;
|
||||||
|
@ -774,6 +775,12 @@ script = {
|
||||||
common = tests/xfs_test.in;
|
common = tests/xfs_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = f2fs_test;
|
||||||
|
common = tests/f2fs_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase;
|
testcase;
|
||||||
name = nilfs2_test;
|
name = nilfs2_test;
|
||||||
|
|
|
@ -360,8 +360,9 @@ blocklist notation. The currently supported filesystem types are @dfn{Amiga
|
||||||
Fast FileSystem (AFFS)}, @dfn{AtheOS fs}, @dfn{BeFS},
|
Fast FileSystem (AFFS)}, @dfn{AtheOS fs}, @dfn{BeFS},
|
||||||
@dfn{BtrFS} (including raid0, raid1, raid10, gzip and lzo),
|
@dfn{BtrFS} (including raid0, raid1, raid10, gzip and lzo),
|
||||||
@dfn{cpio} (little- and big-endian bin, odc and newc variants),
|
@dfn{cpio} (little- and big-endian bin, odc and newc variants),
|
||||||
@dfn{Linux ext2/ext3/ext4}, @dfn{DOS FAT12/FAT16/FAT32}, @dfn{exFAT}, @dfn{HFS},
|
@dfn{Linux ext2/ext3/ext4}, @dfn{DOS FAT12/FAT16/FAT32},
|
||||||
@dfn{HFS+}, @dfn{ISO9660} (including Joliet, Rock-ridge and multi-chunk files),
|
@dfn{exFAT}, @dfn{F2FS}, @dfn{HFS}, @dfn{HFS+},
|
||||||
|
@dfn{ISO9660} (including Joliet, Rock-ridge and multi-chunk files),
|
||||||
@dfn{JFS}, @dfn{Minix fs} (versions 1, 2 and 3), @dfn{nilfs2},
|
@dfn{JFS}, @dfn{Minix fs} (versions 1, 2 and 3), @dfn{nilfs2},
|
||||||
@dfn{NTFS} (including compression), @dfn{ReiserFS}, @dfn{ROMFS},
|
@dfn{NTFS} (including compression), @dfn{ReiserFS}, @dfn{ROMFS},
|
||||||
@dfn{Amiga Smart FileSystem (SFS)}, @dfn{Squash4}, @dfn{tar}, @dfn{UDF},
|
@dfn{Amiga Smart FileSystem (SFS)}, @dfn{Squash4}, @dfn{tar}, @dfn{UDF},
|
||||||
|
@ -5375,7 +5376,7 @@ NTFS, JFS, UDF, HFS+, exFAT, long filenames in FAT, Joliet part of
|
||||||
ISO9660 are treated as UTF-16 as per specification. AFS and BFS are read
|
ISO9660 are treated as UTF-16 as per specification. AFS and BFS are read
|
||||||
as UTF-8, again according to specification. BtrFS, cpio, tar, squash4, minix,
|
as UTF-8, again according to specification. BtrFS, cpio, tar, squash4, minix,
|
||||||
minix2, minix3, ROMFS, ReiserFS, XFS, ext2, ext3, ext4, FAT (short names),
|
minix2, minix3, ROMFS, ReiserFS, XFS, ext2, ext3, ext4, FAT (short names),
|
||||||
RockRidge part of ISO9660, nilfs2, UFS1, UFS2 and ZFS are assumed
|
F2FS, RockRidge part of ISO9660, nilfs2, UFS1, UFS2 and ZFS are assumed
|
||||||
to be UTF-8. This might be false on systems configured with legacy charset
|
to be UTF-8. This might be false on systems configured with legacy charset
|
||||||
but as long as the charset used is superset of ASCII you should be able to
|
but as long as the charset used is superset of ASCII you should be able to
|
||||||
access ASCII-named files. And it's recommended to configure your system to use
|
access ASCII-named files. And it's recommended to configure your system to use
|
||||||
|
|
|
@ -1314,6 +1314,11 @@ module = {
|
||||||
common = fs/exfat.c;
|
common = fs/exfat.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = f2fs;
|
||||||
|
common = fs/f2fs.c;
|
||||||
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = fshelp;
|
name = fshelp;
|
||||||
common = fs/fshelp.c;
|
common = fs/fshelp.c;
|
||||||
|
|
1314
grub-core/fs/f2fs.c
Normal file
1314
grub-core/fs/f2fs.c
Normal file
File diff suppressed because it is too large
Load diff
BIN
po/exclude.pot
BIN
po/exclude.pot
Binary file not shown.
19
tests/f2fs_test.in
Normal file
19
tests/f2fs_test.in
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$EUID" = "x" ] ; then
|
||||||
|
EUID=`id -u`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$EUID" != 0 ] ; then
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkfs.f2fs >/dev/null 2>&1; then
|
||||||
|
echo "mkfs.f2fs not installed; cannot test f2fs."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" f2fs
|
|
@ -172,7 +172,7 @@ for LOGSECSIZE in $(range "$MINLOGSECSIZE" "$MAXLOGSECSIZE" 1); do
|
||||||
xsquash*)
|
xsquash*)
|
||||||
MINBLKSIZE=4096
|
MINBLKSIZE=4096
|
||||||
MAXBLKSIZE=1048576;;
|
MAXBLKSIZE=1048576;;
|
||||||
xxfs)
|
xxfs|xf2fs)
|
||||||
MINBLKSIZE=$SECSIZE
|
MINBLKSIZE=$SECSIZE
|
||||||
# OS Limitation: GNU/Linux doesn't accept > 4096
|
# OS Limitation: GNU/Linux doesn't accept > 4096
|
||||||
MAXBLKSIZE=4096;;
|
MAXBLKSIZE=4096;;
|
||||||
|
@ -299,6 +299,10 @@ for LOGSECSIZE in $(range "$MINLOGSECSIZE" "$MAXLOGSECSIZE" 1); do
|
||||||
x"btrfs"*)
|
x"btrfs"*)
|
||||||
FSLABEL="grub_;/testé莭莽😁киритi urewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoi";;
|
FSLABEL="grub_;/testé莭莽😁киритi urewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoi";;
|
||||||
|
|
||||||
|
# FS LIMITATION: f2fs label is at most 512 UTF-16 chars
|
||||||
|
x"f2fs")
|
||||||
|
FSLABEL="grub_;/testé䏌䐓䏕киритiurewfceniuewruewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoirvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoircreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoiq";;
|
||||||
|
|
||||||
# FS LIMITATION: exfat is at most 15 UTF-16 chars
|
# FS LIMITATION: exfat is at most 15 UTF-16 chars
|
||||||
x"exfat")
|
x"exfat")
|
||||||
FSLABEL="géт ;/莭莽😁кир";;
|
FSLABEL="géт ;/莭莽😁кир";;
|
||||||
|
@ -508,7 +512,7 @@ for LOGSECSIZE in $(range "$MINLOGSECSIZE" "$MAXLOGSECSIZE" 1); do
|
||||||
# FIXME: Not sure about BtrFS, NTFS, JFS, AFS, UDF and SFS. Check it.
|
# FIXME: Not sure about BtrFS, NTFS, JFS, AFS, UDF and SFS. Check it.
|
||||||
# FS LIMITATION: as far as I know those FS don't store their last modification date.
|
# FS LIMITATION: as far as I know those FS don't store their last modification date.
|
||||||
x"jfs_caseins" | x"jfs" | x"xfs" | x"xfs_crc" | x"btrfs"* | x"reiserfs_old" | x"reiserfs" \
|
x"jfs_caseins" | x"jfs" | x"xfs" | x"xfs_crc" | x"btrfs"* | x"reiserfs_old" | x"reiserfs" \
|
||||||
| x"bfs" | x"afs" \
|
| x"bfs" | x"afs" | x"f2fs" \
|
||||||
| x"tarfs" | x"cpio_"* | x"minix" | x"minix2" \
|
| x"tarfs" | x"cpio_"* | x"minix" | x"minix2" \
|
||||||
| x"minix3" | x"ntfs"* | x"udf" | x"sfs"*)
|
| x"minix3" | x"ntfs"* | x"udf" | x"sfs"*)
|
||||||
NOFSTIME=y;;
|
NOFSTIME=y;;
|
||||||
|
@ -792,6 +796,8 @@ for LOGSECSIZE in $(range "$MINLOGSECSIZE" "$MAXLOGSECSIZE" 1); do
|
||||||
MOUNTDEVICE="/dev/mapper/grub_test-testvol"
|
MOUNTDEVICE="/dev/mapper/grub_test-testvol"
|
||||||
MOUNTFS=ext2
|
MOUNTFS=ext2
|
||||||
"mkfs.ext2" -L "$FSLABEL" -q "${MOUNTDEVICE}" ;;
|
"mkfs.ext2" -L "$FSLABEL" -q "${MOUNTDEVICE}" ;;
|
||||||
|
xf2fs)
|
||||||
|
"mkfs.f2fs" -l "$FSLABEL" -q "${LODEVICES[0]}" ;;
|
||||||
xnilfs2)
|
xnilfs2)
|
||||||
"mkfs.nilfs2" -L "$FSLABEL" -b $BLKSIZE -q "${MOUNTDEVICE}" ;;
|
"mkfs.nilfs2" -L "$FSLABEL" -b $BLKSIZE -q "${MOUNTDEVICE}" ;;
|
||||||
xext2_old)
|
xext2_old)
|
||||||
|
|
Loading…
Reference in a new issue