diff options
author | Jörn Engel <joern@logfs.org> | 2012-04-13 01:32:48 +0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-05-17 13:08:52 +0400 |
commit | 794c10fa0fa4d1781c5651c31e3d4d0b71629128 (patch) | |
tree | a671c2930cf5ee050f50bb511bfe83ea20c07ccc /drivers/scsi/sg.c | |
parent | dddbf8d908e89afb14a49502f568d2a2b814436d (diff) | |
download | linux-794c10fa0fa4d1781c5651c31e3d4d0b71629128.tar.xz |
[SCSI] sg: remove while (1) non-loop
The while (1) construct isn't actually a loop at all. So let's not
pretent and obfuscate the code.
Signed-off-by: Joern Engel <joern@logfs.org>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/sg.c')
-rw-r--r-- | drivers/scsi/sg.c | 52 |
1 files changed, 22 insertions, 30 deletions
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index 14de8436f07f..be812e09058d 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -398,19 +398,15 @@ sg_read(struct file *filp, char __user *buf, size_t count, loff_t * ppos) retval = -EAGAIN; goto free_old_hdr; } - while (1) { - retval = 0; /* following macro beats race condition */ - __wait_event_interruptible(sfp->read_wait, - (sdp->detached || - (srp = sg_get_rq_mark(sfp, req_pack_id))), - retval); - if (sdp->detached) { - retval = -ENODEV; - goto free_old_hdr; - } - if (0 == retval) - break; - + retval = 0; /* following macro beats race condition */ + __wait_event_interruptible(sfp->read_wait, + (sdp->detached || + (srp = sg_get_rq_mark(sfp, req_pack_id))), retval); + if (sdp->detached) { + retval = -ENODEV; + goto free_old_hdr; + } + if (retval) { /* -ERESTARTSYS as signal hit process */ goto free_old_hdr; } @@ -801,25 +797,21 @@ sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg) 1, read_only, 1, &srp); if (result < 0) return result; - while (1) { - result = 0; /* following macro to beat race condition */ - __wait_event_interruptible(sfp->read_wait, - (srp->done || sdp->detached), - result); - if (sdp->detached) - return -ENODEV; - write_lock_irq(&sfp->rq_list_lock); - if (srp->done) { - srp->done = 2; - write_unlock_irq(&sfp->rq_list_lock); - break; - } - srp->orphan = 1; + result = 0; /* following macro to beat race condition */ + __wait_event_interruptible(sfp->read_wait, + (srp->done || sdp->detached), result); + if (sdp->detached) + return -ENODEV; + write_lock_irq(&sfp->rq_list_lock); + if (srp->done) { + srp->done = 2; write_unlock_irq(&sfp->rq_list_lock); - return result; /* -ERESTARTSYS because signal hit process */ + result = sg_new_read(sfp, p, SZ_SG_IO_HDR, srp); + return (result < 0) ? result : 0; } - result = sg_new_read(sfp, p, SZ_SG_IO_HDR, srp); - return (result < 0) ? result : 0; + srp->orphan = 1; + write_unlock_irq(&sfp->rq_list_lock); + return result; /* -ERESTARTSYS because signal hit process */ case SG_SET_TIMEOUT: result = get_user(val, ip); if (result) |