Commit 7f252717 authored by Joe Perches's avatar Joe Perches Committed by Linus Torvalds

drivers/block/floppy.c: convert raw_cmd_copyin from while(1) to label: goto

Reduces indent.
Makes a bit more readable and intelligible.
Return value now at bottom of function.
Signed-off-by: default avatarJoe Perches <joe@perches.com>
Cc: Stephen Hemminger <shemminger@vyatta.com>
Cc: Jens Axboe <jens.axboe@oracle.com>
Cc: Marcin Slusarz <marcin.slusarz@gmail.com>
Cc: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent ce2f11fe
...@@ -3126,6 +3126,7 @@ static inline int raw_cmd_copyout(int cmd, void __user *param, ...@@ -3126,6 +3126,7 @@ static inline int raw_cmd_copyout(int cmd, void __user *param,
} }
ptr = ptr->next; ptr = ptr->next;
} }
return 0; return 0;
} }
...@@ -3156,18 +3157,19 @@ static inline int raw_cmd_copyin(int cmd, void __user *param, ...@@ -3156,18 +3157,19 @@ static inline int raw_cmd_copyin(int cmd, void __user *param,
int i; int i;
*rcmd = NULL; *rcmd = NULL;
while (1) {
ptr = kmalloc(sizeof(struct floppy_raw_cmd), GFP_USER); loop:
if (!ptr) ptr = kmalloc(sizeof(struct floppy_raw_cmd), GFP_USER);
return -ENOMEM; if (!ptr)
*rcmd = ptr; return -ENOMEM;
ret = copy_from_user(ptr, param, sizeof(*ptr)); *rcmd = ptr;
if (ret) ret = copy_from_user(ptr, param, sizeof(*ptr));
return -EFAULT; if (ret)
ptr->next = NULL; return -EFAULT;
ptr->buffer_length = 0; ptr->next = NULL;
param += sizeof(struct floppy_raw_cmd); ptr->buffer_length = 0;
if (ptr->cmd_count > 33) param += sizeof(struct floppy_raw_cmd);
if (ptr->cmd_count > 33)
/* the command may now also take up the space /* the command may now also take up the space
* initially intended for the reply & the * initially intended for the reply & the
* reply count. Needed for long 82078 commands * reply count. Needed for long 82078 commands
...@@ -3176,34 +3178,35 @@ static inline int raw_cmd_copyin(int cmd, void __user *param, ...@@ -3176,34 +3178,35 @@ static inline int raw_cmd_copyin(int cmd, void __user *param,
* 16 bytes for a structure, you'll one day * 16 bytes for a structure, you'll one day
* discover that you really need 17... * discover that you really need 17...
*/ */
return -EINVAL;
for (i = 0; i < 16; i++)
ptr->reply[i] = 0;
ptr->resultcode = 0;
ptr->kernel_data = NULL;
if (ptr->flags & (FD_RAW_READ | FD_RAW_WRITE)) {
if (ptr->length <= 0)
return -EINVAL; return -EINVAL;
ptr->kernel_data = (char *)fd_dma_mem_alloc(ptr->length);
fallback_on_nodma_alloc(&ptr->kernel_data, ptr->length);
if (!ptr->kernel_data)
return -ENOMEM;
ptr->buffer_length = ptr->length;
}
if (ptr->flags & FD_RAW_WRITE) {
ret = fd_copyin(ptr->data, ptr->kernel_data, ptr->length);
if (ret)
return ret;
}
for (i = 0; i < 16; i++) if (ptr->flags & FD_RAW_MORE) {
ptr->reply[i] = 0;
ptr->resultcode = 0;
ptr->kernel_data = NULL;
if (ptr->flags & (FD_RAW_READ | FD_RAW_WRITE)) {
if (ptr->length <= 0)
return -EINVAL;
ptr->kernel_data =
(char *)fd_dma_mem_alloc(ptr->length);
fallback_on_nodma_alloc(&ptr->kernel_data, ptr->length);
if (!ptr->kernel_data)
return -ENOMEM;
ptr->buffer_length = ptr->length;
}
if (ptr->flags & FD_RAW_WRITE) {
ret = fd_copyin(ptr->data, ptr->kernel_data,
ptr->length);
if (ret)
return ret;
}
rcmd = &(ptr->next); rcmd = &(ptr->next);
if (!(ptr->flags & FD_RAW_MORE))
return 0;
ptr->rate &= 0x43; ptr->rate &= 0x43;
goto loop;
} }
return 0;
} }
static int raw_cmd_ioctl(int cmd, void __user *param) static int raw_cmd_ioctl(int cmd, void __user *param)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment