From ef8a1cb701ef248c37c72199626385bbbc7df001 Mon Sep 17 00:00:00 2001 From: jixj Date: Wed, 26 Aug 2020 14:37:43 +0800 Subject: [PATCH] utag: report the return value of store_utags() to userspace If store worker failed to store utag, report the failure to userspace so that userspace can deal with it accordingly Change-Id: I1ba9635b776fca1b27ab672a06df4a823e926684 Reviewed-on: https://gerrit.mot.com/1733628 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 | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/misc/utag/utags.c b/drivers/misc/utag/utags.c index 4922fc2987c7..bf316ef2f5fa 100644 --- a/drivers/misc/utag/utags.c +++ b/drivers/misc/utag/utags.c @@ -142,6 +142,7 @@ struct ctrl { struct work_struct load_work; struct work_struct store_work; struct utag *head; + int store_work_result; }; #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) @@ -1193,6 +1194,7 @@ void store_work_func(struct work_struct *work) rc = store_utags(ctrl, ctrl->head); if (rc) pr_err("error storing utags partition\n"); + ctrl->store_work_result = rc; complete(&ctrl->store_comp); } @@ -1349,6 +1351,8 @@ static ssize_t write_utag(struct file *file, const char __user *buffer, queue_work(ctrl->store_queue, &ctrl->store_work); wait_for_completion(&ctrl->store_comp); + if (ctrl->store_work_result) + count = ctrl->store_work_result; free_tags_exit: free_tags(tags); free_temp_exit: @@ -1444,6 +1448,8 @@ static ssize_t delete_utag(struct file *file, const char __user *buffer, /* Store changed partition */ queue_work(ctrl->store_queue, &ctrl->store_work); wait_for_completion(&ctrl->store_comp); + if (ctrl->store_work_result) + count = ctrl->store_work_result; rebuild_utags_directory(ctrl); just_leave: free_tags(tags); @@ -1637,6 +1643,8 @@ static ssize_t new_utag(struct file *file, const char __user *buffer, /* Store changed partition */ queue_work(ctrl->store_queue, &ctrl->store_work); wait_for_completion(&ctrl->store_comp); + if (ctrl->store_work_result) + ret = ctrl->store_work_result; just_leave: free_tags(tags); mutex_unlock(&ctrl->access_lock);