提交 cf446f0d 编写于 作者: E Ed L. Cashin 提交者: Linus Torvalds

aoe: eliminate goto and improve readability

Adam Richter suggested eliminating this goto.
Signed-off-by: NEd L. Cashin <ecashin@coraid.com>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 468fc530
...@@ -194,52 +194,51 @@ aoechr_read(struct file *filp, char __user *buf, size_t cnt, loff_t *off) ...@@ -194,52 +194,51 @@ aoechr_read(struct file *filp, char __user *buf, size_t cnt, loff_t *off)
ulong flags; ulong flags;
n = (unsigned long) filp->private_data; n = (unsigned long) filp->private_data;
switch (n) { if (n != MINOR_ERR)
case MINOR_ERR: return -EFAULT;
spin_lock_irqsave(&emsgs_lock, flags);
loop: spin_lock_irqsave(&emsgs_lock, flags);
em = emsgs + emsgs_head_idx;
if ((em->flags & EMFL_VALID) == 0) {
if (filp->f_flags & O_NDELAY) {
spin_unlock_irqrestore(&emsgs_lock, flags);
return -EAGAIN;
}
nblocked_emsgs_readers++;
for (;;) {
em = emsgs + emsgs_head_idx;
if ((em->flags & EMFL_VALID) != 0)
break;
if (filp->f_flags & O_NDELAY) {
spin_unlock_irqrestore(&emsgs_lock, flags); spin_unlock_irqrestore(&emsgs_lock, flags);
return -EAGAIN;
}
nblocked_emsgs_readers++;
spin_unlock_irqrestore(&emsgs_lock, flags);
n = down_interruptible(&emsgs_sema); n = down_interruptible(&emsgs_sema);
spin_lock_irqsave(&emsgs_lock, flags); spin_lock_irqsave(&emsgs_lock, flags);
nblocked_emsgs_readers--; nblocked_emsgs_readers--;
if (n) { if (n) {
spin_unlock_irqrestore(&emsgs_lock, flags);
return -ERESTARTSYS;
}
goto loop;
}
if (em->len > cnt) {
spin_unlock_irqrestore(&emsgs_lock, flags); spin_unlock_irqrestore(&emsgs_lock, flags);
return -EAGAIN; return -ERESTARTSYS;
} }
mp = em->msg; }
len = em->len; if (em->len > cnt) {
em->msg = NULL; spin_unlock_irqrestore(&emsgs_lock, flags);
em->flags &= ~EMFL_VALID; return -EAGAIN;
}
mp = em->msg;
len = em->len;
em->msg = NULL;
em->flags &= ~EMFL_VALID;
emsgs_head_idx++; emsgs_head_idx++;
emsgs_head_idx %= ARRAY_SIZE(emsgs); emsgs_head_idx %= ARRAY_SIZE(emsgs);
spin_unlock_irqrestore(&emsgs_lock, flags); spin_unlock_irqrestore(&emsgs_lock, flags);
n = copy_to_user(buf, mp, len); n = copy_to_user(buf, mp, len);
kfree(mp); kfree(mp);
return n == 0 ? len : -EFAULT; return n == 0 ? len : -EFAULT;
default:
return -EFAULT;
}
} }
static const struct file_operations aoe_fops = { static const struct file_operations aoe_fops = {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册