Support an fs_io dev_fill().
This helps with devices that actually already return 0 on uninitialized
data. It also helps with in memory devices using sparse libs: don't
allocate a block of 0s.
Signed-off-by: JP Abgrall <jpa@google.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
fix an bug related to extension list.
there was the potential bug in set_cold_files function, namei.c.
Signed-off-by: Dongho Sim <dh.sim@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
This patch synchronizes mkfs with the latest f2fs configuration in which
supports large directory by assigning dir_level.
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
We should consider checksum bytes in the checkpoint block.
Previously, this bug incured very critical panics for node entry handling.
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
Currently mkfs followed by fsck will fail with
[f2fs_crc_valid: 351] CRC validation failed: cal_crc = 4076150800 blk_crc = 0 buff_size = 0x0
This is because the validatie_checkpoint() tries to read and checksum the
cp page 2, and it is invoked on both cp packs.
But format only writes the page 1 of the 2nd checkpoint pack.
Signed-off-by: JP Abgrall <jpa@google.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
This change allows for f2fs_format to work on a non-standard device (e.g.
sparse-memory backed file).
Removes direct access to config.fd from within f2fs_format.c.
Now, f2fs_format_device() can be made to work against any device by
providing
f2fs_finalize_device()
f2fs_trim_device()
and the lib2fs.c functions
ASCIIToUNICODE
dev_write
f2fs_cal_crc32
f2fs_set_bit
log_base_2
This will allow Android's fastboot to use f2fs against a libsparse.
Signed-off-by: JP Abgrall <jpa@google.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
If the device does not support discard, we should write zero blocks
to avoid roll-forward recovery.
Reported-and-tested-by: Huajun Li <huajun.li@intel.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
flash devices support discard therefore discard is default but not set
in config
Signed-off-by: Changman Lee <cm224.lee@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
In the case of lazy umount, "umount -l", some processes are able to use the
file system even if its mountpoint was disconnected.
At this moment, we should not allow mkfs.f2fs.
This patch adds this condition check.
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
Android systems uses apks for their application packages.
These files are normally used as read-only.
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
We can count the main area as the data zones. Remove the '-1' miscalcuation.
Signed-off-by: Wang Sheng-Hui <shhuiw@gmail.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
This patch fixes a bug in the function "f2fs_update_nat_root", where the
access to the array "nat_blk->entries" was done using an index without
encapsulation of the "le32_to_cpu" macro.
The bug happens when trying to format an SD card in a powerpc architecture,
which natively runs at big-endian mode
Signed-off-by: Oded Gabbay <ogabbay@advaoptical.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
This patch adds an option to disable trim command at format.
Default operation sends trim command to device.
Signed-off-by: Changman Lee <cm224.lee@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
Mkfs copies labels up to 512 characters into a the 16 character buffer
config.vol_label corrupting memory afterwards and causing a core dump.
# mkfs.f2fs -l aaaaaaaaaabbbbbbbbbbcccccccccc /dev/sda12
F2FS-tools: mkfs.f2fs Ver: 1.1.0 (2013-03-08)
Info: Label = aaaaaaaaaabbbbbbbbbbcccccccccc
Info: sector size = 512
Info: total sectors = 2097152 (in 512bytes)
Info: zone aligned segment0 blkaddr: 256
Segmentation fault (core dumped)
Make config.vol_label a pointer to the label in argv, rather than
copying it into a too small buffer.
Signed-off-by: Mike Fleetwood <mike.fleetwood@googlemail.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
By default, we should use dynamic linking.
If anyone need to build 100% statically, add -all-static.
This reverts commit 2eb19102d4c5bec57c04c944ee697584a493ef9c.
This is due to GC on data sections.
When a data section is cleaned, it produces maximum same number of dirty node
blocks additionally.
So, we should reserve x2 sections to flush dirty node blocks safely.
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
Some block devices don't implement HDIO_GETGEP ioctl;
loop device being a notable example.
Without this patch, it's not possible to make a f2fs
on a file mounted over a loop device.
Signed-off-by: Ezequiel Garcia <ezequiel@free-electrons.com>
Patch 1:
Now we have two different versions that produce different superblocks/
filesystems with the same version info. Major/minor version in the sb
should reflect the version of the tool creating the filesystem. This
patch will ensure that the version entered in the file VERSION will
be used consistently throughout the code.
Patch 2:
In order to simplify the maintenance with a new release the date
in F2FS_TOOLS_DATE is now take from the last commit in git. Thus,
git is needed to run autoconf. However, git is not needed for the
simple build procedure, ./configure && make, that should be the
only things needed to build the tool from a tar.gz package.
Pros & Cons:
[+] Automated
[+] True
[-] Git needed to run autoreconf
Change log by Jaegeuk from the initial patch-set:
- Merge two patches into one
: Eliminate the intermediate state having version.h and VERSION.
- Remove the Git dependency which is one of Cons
: If there is no git tree, just use DATE described in VERSION.
- Minor coding style
Pros & Cons:
[+] Automated
[+] True
[+] No Git dependency
Signed-off-by: Sven-Göran Bergh <sgb@systemasis.org>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
This patch fixes the bug as follows.
"I'm trying to roll out f2fs on top of SDHC card and faced with following
issue - after mounting card I cannot read device root entry. It returns
-1 EINVAL (entry too big).
getdents(3, /* 1 entries */, 32768) = 24
getdents(3, 0x1082c88, 32768) = -1 EINVAL (Invalid argument)"
reported by Ruslan N. Marchenko [me@ruff.mobi].
This bug is easily reproducible and I couldn't have checked the mount
entry cautiously.
Due to the bug, f2fs couldn't get default dentries, . and .., in the root
directory. In the case of other newly created directories, that's fine.
The problem was the overflow during casting variables while calculating the
block address of the root dentry block.
In order to avoid that, I simply split the equation under consideration of
the casting issue.
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
There are two superblock writes in mkfs.f2fs.
offset: 0 1024 4095 5119 8191
|------> 1'st superblock ----|--------> 2'nd superblock ----|
Therefore, each superblocks has 1024 byte-size offset.
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
When f2fs is unmounted cleanly, it stores active summmary blocks of nodes in the
checkpoint pack in order to avoid reconstruct all of them at the later mount
time. Previously, mkfs didn't prepare that, which is why the initial mount time
is so huge.
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
"Usually, it is used 128-bits UUID for serial number. Why do you use
__le32 as volume_serial_number?"
>From Vyacheslav Dubeyko.
I added an uuid facility for the serial number.
And sync with kernel/include/linux/f2fs_fs.h.
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
"You appear to have dropped i_btime - no big deal, you weren't using it anyway.
However if you ever want to support NFS export you will need some value which
is assigned when the inode is allocated and never changed until it is
de-allocated. This is used to detect when an NFS file-handle refers to a
previous incarnation of an inode and so should be rejected as STALE.
i_btime could have possibly provided this, but not any more. You might want
to add something back.
ext3 uses "i_generation" and has an 's_next_generation' in the superblock to
ensure that each new inode gets a new generation number.
You've also dropped i_atime. I can certainly understand the desire to do
that, but I wonder if it is entirely wise. There are some use-cases where
i_mtime is a poor substitute.
Also 'current_depth' looks a little odd without a 'i_' prefix. It wouldn't
hurt to have a comment noting that it is for directories."
>From Neil Brown.
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>