summaryrefslogtreecommitdiffstats
path: root/fs_mgr
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@google.com>2018-02-22 18:10:05 -0800
committerJaegeuk Kim <jaegeuk@google.com>2018-02-26 15:47:09 -0800
commitefd3b9c28f05c99279f6f9ff0af1956cce09f6a9 (patch)
tree1d718faad6c8f3cab808e3c9dfe81eb96a273932 /fs_mgr
parent89063827b195056628f80ba13fedf4c8917c3d51 (diff)
downloadsystem_core-efd3b9c28f05c99279f6f9ff0af1956cce09f6a9.tar.gz
system_core-efd3b9c28f05c99279f6f9ff0af1956cce09f6a9.tar.bz2
system_core-efd3b9c28f05c99279f6f9ff0af1956cce09f6a9.zip
fs_mgr: add sysfs_path=%s to indicate a location of sysfs entry
This patch adds sysfs_path=%s in fstab to get the sysfs entry path. One example is that vold is able to conduct UFS-specific operations given the below fstab entry. /dev/block/bootdevice/by-name/userdata /data f2fs noatime,nosuid,nodev,discard latemount,wait,check,fileencryption=ice,quota,formattable,sysfs_path=/sys/devices/platform/soc/1d84000.ufshc Bug: 63264275 Bug: 68721792 Change-Id: I5097873893948f12296ac5eaa0c2a59a6e6dd9e1 Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
Diffstat (limited to 'fs_mgr')
-rw-r--r--fs_mgr/fs_mgr_fstab.cpp12
-rw-r--r--fs_mgr/fs_mgr_priv.h3
-rw-r--r--fs_mgr/include_fstab/fstab/fstab.h2
3 files changed, 16 insertions, 1 deletions
diff --git a/fs_mgr/fs_mgr_fstab.cpp b/fs_mgr/fs_mgr_fstab.cpp
index 1c01d8c87..9b7405a3d 100644
--- a/fs_mgr/fs_mgr_fstab.cpp
+++ b/fs_mgr/fs_mgr_fstab.cpp
@@ -39,6 +39,7 @@ struct fs_mgr_flag_values {
char *key_loc;
char* key_dir;
char *verity_loc;
+ char *sysfs_path;
long long part_length;
char *label;
int partnum;
@@ -104,6 +105,7 @@ static struct flag_list fs_mgr_flags[] = {
{"quota", MF_QUOTA},
{"eraseblk=", MF_ERASEBLKSIZE},
{"logicalblk=", MF_LOGICALBLKSIZE},
+ {"sysfs_path=", MF_SYSFS},
{"defaults", 0},
{0, 0},
};
@@ -341,6 +343,9 @@ static int parse_flags(char *flags, struct flag_list *fl,
unsigned int val = strtoul(strchr(p, '=') + 1, NULL, 0);
if (val >= 4096 && (val & (val - 1)) == 0)
flag_vals->logical_blk_size = val;
+ } else if ((fl[i].flag == MF_SYSFS) && flag_vals) {
+ /* The path to trigger device gc by idle-maint of vold. */
+ flag_vals->sysfs_path = strdup(strchr(p, '=') + 1);
}
break;
}
@@ -615,6 +620,7 @@ static struct fstab *fs_mgr_read_fstab_file(FILE *fstab_file)
fstab->recs[cnt].file_names_mode = flag_vals.file_names_mode;
fstab->recs[cnt].erase_blk_size = flag_vals.erase_blk_size;
fstab->recs[cnt].logical_blk_size = flag_vals.logical_blk_size;
+ fstab->recs[cnt].sysfs_path = flag_vals.sysfs_path;
cnt++;
}
/* If an A/B partition, modify block device to be the real block device */
@@ -787,6 +793,7 @@ void fs_mgr_free_fstab(struct fstab *fstab)
free(fstab->recs[i].key_loc);
free(fstab->recs[i].key_dir);
free(fstab->recs[i].label);
+ free(fstab->recs[i].sysfs_path);
}
/* Free the fstab_recs array created by calloc(3) */
@@ -922,3 +929,8 @@ int fs_mgr_is_latemount(const struct fstab_rec* fstab) {
int fs_mgr_is_quota(const struct fstab_rec* fstab) {
return fstab->fs_mgr_flags & MF_QUOTA;
}
+
+int fs_mgr_has_sysfs_path(const struct fstab_rec *fstab)
+{
+ return fstab->fs_mgr_flags & MF_SYSFS;
+}
diff --git a/fs_mgr/fs_mgr_priv.h b/fs_mgr/fs_mgr_priv.h
index 724156d70..ade0cc4cd 100644
--- a/fs_mgr/fs_mgr_priv.h
+++ b/fs_mgr/fs_mgr_priv.h
@@ -109,7 +109,8 @@
#define MF_ERASEBLKSIZE 0x800000
#define MF_LOGICALBLKSIZE 0X1000000
#define MF_AVB 0X2000000
-#define MF_KEYDIRECTORY 0X4000000
+#define MF_KEYDIRECTORY 0X4000000
+#define MF_SYSFS 0X8000000
#define DM_BUF_SIZE 4096
diff --git a/fs_mgr/include_fstab/fstab/fstab.h b/fs_mgr/include_fstab/fstab/fstab.h
index 94aacfdb3..8c585dd2f 100644
--- a/fs_mgr/include_fstab/fstab/fstab.h
+++ b/fs_mgr/include_fstab/fstab/fstab.h
@@ -56,6 +56,7 @@ struct fstab_rec {
unsigned int file_names_mode;
unsigned int erase_blk_size;
unsigned int logical_blk_size;
+ char* sysfs_path;
};
struct fstab* fs_mgr_read_fstab_default();
@@ -83,6 +84,7 @@ int fs_mgr_is_slotselect(const struct fstab_rec* fstab);
int fs_mgr_is_nofail(const struct fstab_rec* fstab);
int fs_mgr_is_latemount(const struct fstab_rec* fstab);
int fs_mgr_is_quota(const struct fstab_rec* fstab);
+int fs_mgr_has_sysfs_path(const struct fstab_rec* fstab);
std::string fs_mgr_get_slot_suffix();