scst/src/dev_handlers/scst_user: Simplify dev_user_reply_get_multi()

Remove multiple pointer casts. This patch does not change any functionality.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8850 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Bart Van Assche
2020-04-04 23:24:47 +00:00
parent 1db9c3c8b2
commit b2facc91c9

View File

@@ -2356,29 +2356,27 @@ out:
return res;
}
static int dev_user_reply_get_multi(struct file *file, void __user *arg)
static int dev_user_reply_get_multi(struct file *file,
struct scst_user_get_multi __user* gm)
{
int res = 0, rc;
struct scst_user_dev *dev;
struct scst_user_dev *dev = file->private_data;
struct scst_user_reply_cmd __user *replies;
int16_t i, replies_cnt, replies_done = 0, cmds_cnt = 0;
TRACE_ENTRY();
dev = (struct scst_user_dev *)file->private_data;
res = dev_user_check_reg(dev);
if (unlikely(res != 0))
goto out;
res = get_user(replies_cnt, (int16_t __user *)
&((struct scst_user_get_multi __user *)arg)->replies_cnt);
res = get_user(replies_cnt, &gm->replies_cnt);
if (unlikely(res < 0)) {
PRINT_ERROR("%s", "Unable to get replies_cnt");
goto out;
}
res = get_user(cmds_cnt, (int16_t __user *)
&((struct scst_user_get_multi __user *)arg)->cmds_cnt);
res = get_user(cmds_cnt, &gm->cmds_cnt);
if (unlikely(res < 0)) {
PRINT_ERROR("%s", "Unable to get cmds_cnt");
goto out;
@@ -2391,8 +2389,7 @@ static int dev_user_reply_get_multi(struct file *file, void __user *arg)
goto get_cmds;
/* get_user() can't be used with 64-bit values on x86_32 */
rc = copy_from_user(&replies, (uint64_t __user *)
&((struct scst_user_get_multi __user *)arg)->preplies, sizeof(replies));
rc = copy_from_user(&replies, &gm->preplies, sizeof(replies));
if (unlikely(rc != 0)) {
PRINT_ERROR("%s", "Unable to get preply");
res = -EFAULT;
@@ -2419,15 +2416,13 @@ static int dev_user_reply_get_multi(struct file *file, void __user *arg)
}
TRACE_DBG("Returning %d replies_done", replies_done);
res = put_user(replies_done, (int16_t __user *)
&((struct scst_user_get_multi __user *)arg)->replies_done);
res = put_user(replies_done, &gm->replies_done);
if (unlikely(res < 0))
goto out;
get_cmds:
for (i = 0; i < cmds_cnt; i++) {
res = dev_user_get_cmd_to_user(dev,
&((struct scst_user_get_multi __user *)arg)->cmds[i], i == 0);
res = dev_user_get_cmd_to_user(dev, &gm->cmds[i], i == 0);
if (res != 0) {
if ((res == -EAGAIN) && (i > 0))
res = 0;
@@ -2436,8 +2431,7 @@ get_cmds:
}
TRACE_DBG("Returning %d cmds_ret", i);
rc = put_user(i, (int16_t __user *)
&((struct scst_user_get_multi __user *)arg)->cmds_cnt);
rc = put_user(i, &gm->cmds_cnt);
if (unlikely(rc < 0)) {
res = rc; /* this error is more important */
goto out;
@@ -2449,10 +2443,8 @@ out:
out_part_replies_done:
TRACE_DBG("Partial returning %d replies_done", replies_done);
put_user(replies_done, (int16_t __user *)
&((struct scst_user_get_multi __user *)arg)->replies_done);
rc = put_user(0, (int16_t __user *)
&((struct scst_user_get_multi __user *)arg)->cmds_cnt);
put_user(replies_done, &gm->replies_done);
rc = put_user(0, &gm->cmds_cnt);
goto out;
}