From 20934360c1ea5e509bf02a482e66d36c092bac8b Mon Sep 17 00:00:00 2001 From: Konstantin Makariev Date: Fri, 15 Jun 2018 15:00:53 -0500 Subject: [PATCH] utags: add kernel version independent read call Function kernel_read prototype is different in kernel 4.9 and 4.14. Adding conversion function based on LINUX_VERSION_CODE Change-Id: Ic993ae91ddbc4db4608822009954208923abe205 Signed-off-by: Konstantin Makariev Reviewed-on: https://gerrit.mot.com/1194418 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Konstantin Makariev Submit-Approved: Jira Key --- drivers/misc/utag/utags.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/misc/utag/utags.c b/drivers/misc/utag/utags.c index 9ae07fdf0395..8920a05e882d 100644 --- a/drivers/misc/utag/utags.c +++ b/drivers/misc/utag/utags.c @@ -36,6 +36,7 @@ #include #include #include +#include #define MAX_UTAG_SIZE 1024 #define MAX_UTAG_NAME 32 @@ -143,6 +144,19 @@ struct ctrl { struct utag *head; }; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) +static inline ssize_t kernel_read_stub(struct file *file, void *addr, size_t count) +{ + loff_t pos = 0; + return kernel_read(file, addr, count, &pos); +} +#else +static inline ssize_t kernel_read_stub(struct file *file, void *addr, size_t count) +{ + return kernel_read(file, 0, addr, count); +} +#endif + static int build_utags_directory(struct ctrl *ctrl); static void clear_utags_directory(struct ctrl *ctrl); @@ -220,7 +234,7 @@ static int read_head(struct blkdev *cb, struct utag *htag) return -EINVAL; } - bytes = kernel_read(cb->filep, 0, (void *) &buf, UTAG_MIN_TAG_SIZE); + bytes = kernel_read_stub(cb->filep, (void *) &buf, UTAG_MIN_TAG_SIZE); if ((int) UTAG_MIN_TAG_SIZE > bytes) { pr_err("ERR file (%s) read failed ret %d\n", cb->name, bytes); return -EIO; @@ -912,7 +926,7 @@ static struct utag *load_utags(struct blkdev *cb) if (!data) return NULL; - ret_bytes = kernel_read(cb->filep, 0, data, bytes); + ret_bytes = kernel_read_stub(cb->filep, data, bytes); if (bytes != ret_bytes) { pr_err("(%s) read failed ret %d\n", cb->name, ret_bytes); goto free_data;