summaryrefslogtreecommitdiffstats
path: root/fs_mgr/fs_mgr_format.c
diff options
context:
space:
mode:
authorDiogo Ferreira <diogo@underdev.org>2015-09-07 14:30:31 +0100
committerSteve Kondik <steve@cyngn.com>2015-10-16 06:39:15 -0700
commit51300a558f953146a0cd55acfdc3b642a512005b (patch)
tree80801c308c3ae20753df54d9e4cd638aae90d2e7 /fs_mgr/fs_mgr_format.c
parentdfe4df3928490dc9a56c97ffcdd8ea7e90b49358 (diff)
downloadsystem_core-51300a558f953146a0cd55acfdc3b642a512005b.zip
system_core-51300a558f953146a0cd55acfdc3b642a512005b.tar.gz
system_core-51300a558f953146a0cd55acfdc3b642a512005b.tar.bz2
fs_mgr: When formating ext4 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 ext4 formatting, if the length is greater than zero, use that, if it isn't subtract that size from the block size. Change-Id: I4d18d5161360f8de0e571352e705678682e61332 Ticket: CYNGNOS-931
Diffstat (limited to 'fs_mgr/fs_mgr_format.c')
-rw-r--r--fs_mgr/fs_mgr_format.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/fs_mgr/fs_mgr_format.c b/fs_mgr/fs_mgr_format.c
index c73045d..3a75899 100644
--- a/fs_mgr/fs_mgr_format.c
+++ b/fs_mgr/fs_mgr_format.c
@@ -31,7 +31,7 @@
extern struct fs_info info; /* magic global from ext4_utils */
extern void reset_ext4fs_info();
-static int format_ext4(char *fs_blkdev, char *fs_mnt_point)
+static int format_ext4(char *fs_blkdev, char *fs_mnt_point, long long fs_length)
{
unsigned int nr_sec;
int fd, rc = 0;
@@ -51,6 +51,12 @@ static int format_ext4(char *fs_blkdev, char *fs_mnt_point)
reset_ext4fs_info();
info.len = ((off64_t)nr_sec * 512);
+ if (fs_length > 0) {
+ info.len = fs_length;
+ } else if (fs_length < 0) {
+ info.len += fs_length;
+ }
+
/* Use make_ext4fs_internal to avoid wiping an already-wiped partition. */
rc = make_ext4fs_internal(fd, NULL, NULL, fs_mnt_point, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL);
if (rc) {
@@ -110,7 +116,7 @@ int fs_mgr_do_format(struct fstab_rec *fstab)
if (!strncmp(fstab->fs_type, "f2fs", 4)) {
rc = format_f2fs(fstab->blk_device);
} else if (!strncmp(fstab->fs_type, "ext4", 4)) {
- rc = format_ext4(fstab->blk_device, fstab->mount_point);
+ rc = format_ext4(fstab->blk_device, fstab->mount_point, fstab->length);
} else {
ERROR("File system type '%s' is not supported\n", fstab->fs_type);
}