aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinaro CI <ci-bot@linaro.org>2020-06-09 16:15:38 +0000
committerLinaro CI <ci-bot@linaro.org>2020-06-09 16:15:38 +0000
commit9607f3314431a9f15577f96430aaead5844108bc (patch)
tree972fbe2099c5326c2a0b32734781b2ae98c4ff3e
parentd6527af3020d7e1211109efdf63482a7b3774538 (diff)
parent9fe854df0eac27f6cad5dbdd149cfd499872c493 (diff)
downloadhikey-linaro-4.14.183-3013-g9fe854df0eac-20200609-111.tar.gz
Merge remote-tracking branch 'aosp/mirror-android-4.14-stable' into android-hikey-linaro-4.14-stable-lkftv4.14.183-3013-g9fe854df0eac-20200609-111
-rw-r--r--drivers/md/dm-bow.c85
-rw-r--r--fs/incfs/Kconfig1
-rw-r--r--fs/incfs/integrity.c1
3 files changed, 74 insertions, 13 deletions
diff --git a/drivers/md/dm-bow.c b/drivers/md/dm-bow.c
index 0d1ddb2b6e61..96ddba82ed24 100644
--- a/drivers/md/dm-bow.c
+++ b/drivers/md/dm-bow.c
@@ -622,6 +622,72 @@ static void dm_bow_dtr(struct dm_target *ti)
kfree(bc);
}
+static void dm_bow_io_hints(struct dm_target *ti, struct queue_limits *limits)
+{
+ struct bow_context *bc = ti->private;
+ const unsigned int block_size = bc->block_size;
+
+ limits->logical_block_size =
+ max_t(unsigned short, limits->logical_block_size, block_size);
+ limits->physical_block_size =
+ max_t(unsigned int, limits->physical_block_size, block_size);
+ limits->io_min = max_t(unsigned int, limits->io_min, block_size);
+
+ if (limits->max_discard_sectors == 0) {
+ limits->discard_granularity = 1 << 12;
+ limits->max_hw_discard_sectors = 1 << 15;
+ limits->max_discard_sectors = 1 << 15;
+ bc->forward_trims = false;
+ } else {
+ limits->discard_granularity = 1 << 12;
+ bc->forward_trims = true;
+ }
+}
+
+static int dm_bow_ctr_optional(struct dm_target *ti, unsigned int argc,
+ char **argv)
+{
+ struct bow_context *bc = ti->private;
+ struct dm_arg_set as;
+ static const struct dm_arg _args[] = {
+ {0, 1, "Invalid number of feature args"},
+ };
+ unsigned int opt_params;
+ const char *opt_string;
+ int err;
+ char dummy;
+
+ as.argc = argc;
+ as.argv = argv;
+
+ err = dm_read_arg_group(_args, &as, &opt_params, &ti->error);
+ if (err)
+ return err;
+
+ while (opt_params--) {
+ opt_string = dm_shift_arg(&as);
+ if (!opt_string) {
+ ti->error = "Not enough feature arguments";
+ return -EINVAL;
+ }
+
+ if (sscanf(opt_string, "block_size:%u%c",
+ &bc->block_size, &dummy) == 1) {
+ if (bc->block_size < SECTOR_SIZE ||
+ bc->block_size > 4096 ||
+ !is_power_of_2(bc->block_size)) {
+ ti->error = "Invalid block_size";
+ return -EINVAL;
+ }
+ } else {
+ ti->error = "Invalid feature arguments";
+ return -EINVAL;
+ }
+ }
+
+ return 0;
+}
+
static int dm_bow_ctr(struct dm_target *ti, unsigned int argc, char **argv)
{
struct bow_context *bc;
@@ -629,7 +695,7 @@ static int dm_bow_ctr(struct dm_target *ti, unsigned int argc, char **argv)
int ret;
struct mapped_device *md = dm_table_get_md(ti->table);
- if (argc != 1) {
+ if (argc < 1) {
ti->error = "Invalid argument count";
return -EINVAL;
}
@@ -652,17 +718,13 @@ static int dm_bow_ctr(struct dm_target *ti, unsigned int argc, char **argv)
goto bad;
}
- if (bc->dev->bdev->bd_queue->limits.max_discard_sectors == 0) {
- bc->dev->bdev->bd_queue->limits.discard_granularity = 1 << 12;
- bc->dev->bdev->bd_queue->limits.max_hw_discard_sectors = 1 << 15;
- bc->dev->bdev->bd_queue->limits.max_discard_sectors = 1 << 15;
- bc->forward_trims = false;
- } else {
- bc->dev->bdev->bd_queue->limits.discard_granularity = 1 << 12;
- bc->forward_trims = true;
+ bc->block_size = bc->dev->bdev->bd_queue->limits.logical_block_size;
+ if (argc > 1) {
+ ret = dm_bow_ctr_optional(ti, argc - 1, &argv[1]);
+ if (ret)
+ goto bad;
}
- bc->block_size = bc->dev->bdev->bd_queue->limits.logical_block_size;
bc->block_shift = ilog2(bc->block_size);
bc->log_sector = kzalloc(bc->block_size, GFP_KERNEL);
if (!bc->log_sector) {
@@ -1206,7 +1268,7 @@ static int dm_bow_iterate_devices(struct dm_target *ti,
static struct target_type bow_target = {
.name = "bow",
- .version = {1, 1, 1},
+ .version = {1, 2, 0},
.module = THIS_MODULE,
.ctr = dm_bow_ctr,
.dtr = dm_bow_dtr,
@@ -1214,6 +1276,7 @@ static struct target_type bow_target = {
.status = dm_bow_status,
.prepare_ioctl = dm_bow_prepare_ioctl,
.iterate_devices = dm_bow_iterate_devices,
+ .io_hints = dm_bow_io_hints,
};
int __init dm_bow_init(void)
diff --git a/fs/incfs/Kconfig b/fs/incfs/Kconfig
index a655d599ea46..1ffe31a9c0ff 100644
--- a/fs/incfs/Kconfig
+++ b/fs/incfs/Kconfig
@@ -9,7 +9,6 @@ config INCREMENTAL_FS
select X509_CERTIFICATE_PARSER
select ASYMMETRIC_KEY_TYPE
select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
- select PKCS7_MESSAGE_PARSER
help
Incremental FS is a read-only virtual file system that facilitates execution
of programs while their binaries are still being lazily downloaded over the
diff --git a/fs/incfs/integrity.c b/fs/incfs/integrity.c
index d049988ef037..bce319ec2e52 100644
--- a/fs/incfs/integrity.c
+++ b/fs/incfs/integrity.c
@@ -6,7 +6,6 @@
#include <crypto/hash.h>
#include <linux/err.h>
#include <linux/version.h>
-#include <crypto/pkcs7.h>
#include "integrity.h"