lkml.org 
[lkml]   [2007]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 05/13] eliminate goto and improve readability
    Date
    Adam Richter suggested eliminating this goto.

    Signed-off-by: Ed L. Cashin <ecashin@coraid.com>
    ---
    drivers/block/aoe/aoechr.c | 69 +++++++++++++++++++++----------------------
    1 files changed, 34 insertions(+), 35 deletions(-)

    diff --git a/drivers/block/aoe/aoechr.c b/drivers/block/aoe/aoechr.c
    index 1a5c4b5..4a3889d 100644
    --- a/drivers/block/aoe/aoechr.c
    +++ b/drivers/block/aoe/aoechr.c
    @@ -194,52 +194,51 @@ aoechr_read(struct file *filp, char __user *buf, size_t cnt, loff_t *off)
    ulong flags;

    n = (unsigned long) filp->private_data;
    - switch (n) {
    - case MINOR_ERR:
    - spin_lock_irqsave(&emsgs_lock, flags);
    -loop:
    - 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++;
    + if (n != MINOR_ERR)
    + return -EFAULT;
    +
    + spin_lock_irqsave(&emsgs_lock, flags);

    + 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);
    + 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) {
    - spin_unlock_irqrestore(&emsgs_lock, flags);
    - return -ERESTARTSYS;
    - }
    - goto loop;
    - }
    - if (em->len > cnt) {
    + if (n) {
    spin_unlock_irqrestore(&emsgs_lock, flags);
    - return -EAGAIN;
    + return -ERESTARTSYS;
    }
    - mp = em->msg;
    - len = em->len;
    - em->msg = NULL;
    - em->flags &= ~EMFL_VALID;
    + }
    + if (em->len > cnt) {
    + spin_unlock_irqrestore(&emsgs_lock, flags);
    + return -EAGAIN;
    + }
    + mp = em->msg;
    + len = em->len;
    + em->msg = NULL;
    + em->flags &= ~EMFL_VALID;

    - emsgs_head_idx++;
    - emsgs_head_idx %= ARRAY_SIZE(emsgs);
    + emsgs_head_idx++;
    + 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);
    - kfree(mp);
    - return n == 0 ? len : -EFAULT;
    - default:
    - return -EFAULT;
    - }
    + n = copy_to_user(buf, mp, len);
    + kfree(mp);
    + return n == 0 ? len : -EFAULT;
    }

    static const struct file_operations aoe_fops = {
    --
    1.5.3.4


    \
     
     \ /
      Last update: 2007-12-07 18:55    [W:0.030 / U:29.676 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site