summaryrefslogtreecommitdiffstats
path: root/fs_mgr
diff options
context:
space:
mode:
authorKeith Mok <kmok@cyngn.com>2015-09-25 16:59:10 -0700
committerSteve Kondik <steve@cyngn.com>2015-10-16 06:39:21 -0700
commitf0b761f83d19ab2bb5bbba3ef77a5f75ef8ab7b6 (patch)
tree080b118ccbe2ebdfd1d65945c48c61ed36f50d86 /fs_mgr
parent51300a558f953146a0cd55acfdc3b642a512005b (diff)
downloadsystem_core-f0b761f83d19ab2bb5bbba3ef77a5f75ef8ab7b6.zip
system_core-f0b761f83d19ab2bb5bbba3ef77a5f75ef8ab7b6.tar.gz
system_core-f0b761f83d19ab2bb5bbba3ef77a5f75ef8ab7b6.tar.bz2
fs_mgr: When formating f2fs volumes, respect the length parameter
When formatting a volume because it is marked as formattable, the length parameter is discarded which makes fs_mgr write a filesystem to the full length of the block device. This patch adds length semantics to f2fs formatting, if the length is greater than zero, use that, if it isn't subtract that size from the block size. Change-Id: I526f80aa299e7b34e9802141e7fa7050d5cb5558 Ticket: SAMBAR-729
Diffstat (limited to 'fs_mgr')
-rw-r--r--fs_mgr/fs_mgr_format.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/fs_mgr/fs_mgr_format.c b/fs_mgr/fs_mgr_format.c
index 3a75899..7b6a40f 100644
--- a/fs_mgr/fs_mgr_format.c
+++ b/fs_mgr/fs_mgr_format.c
@@ -67,15 +67,27 @@ static int format_ext4(char *fs_blkdev, char *fs_mnt_point, long long fs_length)
return rc;
}
-static int format_f2fs(char *fs_blkdev)
+static int format_f2fs(char *fs_blkdev, long long fs_length)
{
- char * args[3];
+ char * args[5];
int pid;
int rc = 0;
+ char buff[65];
args[0] = (char *)"/sbin/mkfs.f2fs";
- args[1] = fs_blkdev;
- args[2] = (char *)0;
+
+ if (fs_length >= 0) {
+ snprintf(buff, sizeof(buff), "%lld", fs_length / 512);
+ args[1] = fs_blkdev;
+ args[2] = buff;
+ args[3] = (char *)0;
+ } else if (fs_length < 0) {
+ snprintf(buff, sizeof(buff), "%lld", -fs_length);
+ args[1] = "-r";
+ args[2] = buff;
+ args[3] = fs_blkdev;
+ args[4] = (char *)0;
+ }
pid = fork();
if (pid < 0) {
@@ -114,7 +126,7 @@ int fs_mgr_do_format(struct fstab_rec *fstab)
ERROR("%s: Format %s as '%s'.\n", __func__, fstab->blk_device, fstab->fs_type);
if (!strncmp(fstab->fs_type, "f2fs", 4)) {
- rc = format_f2fs(fstab->blk_device);
+ rc = format_f2fs(fstab->blk_device, fstab->length);
} else if (!strncmp(fstab->fs_type, "ext4", 4)) {
rc = format_ext4(fstab->blk_device, fstab->mount_point, fstab->length);
} else {