diff options
author | Jörn Engel <joern@logfs.org> | 2012-04-12 17:32:48 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-05-17 05:08:52 -0400 |
commit | 794c10fa0fa4d1781c5651c31e3d4d0b71629128 (patch) | |
tree | a671c2930cf5ee050f50bb511bfe83ea20c07ccc /drivers/scsi/sg.c | |
parent | dddbf8d908e89afb14a49502f568d2a2b814436d (diff) |
[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) | |||
398 | retval = -EAGAIN; | 398 | retval = -EAGAIN; |
399 | goto free_old_hdr; | 399 | goto free_old_hdr; |
400 | } | 400 | } |
401 | while (1) { | 401 | retval = 0; /* following macro beats race condition */ |
402 | retval = 0; /* following macro beats race condition */ | 402 | __wait_event_interruptible(sfp->read_wait, |
403 | __wait_event_interruptible(sfp->read_wait, | 403 | (sdp->detached || |
404 | (sdp->detached || | 404 | (srp = sg_get_rq_mark(sfp, req_pack_id))), retval); |
405 | (srp = sg_get_rq_mark(sfp, req_pack_id))), | 405 | if (sdp->detached) { |
406 | retval); | 406 | retval = -ENODEV; |
407 | if (sdp->detached) { | 407 | goto free_old_hdr; |
408 | retval = -ENODEV; | 408 | } |
409 | goto free_old_hdr; | 409 | if (retval) { |
410 | } | ||
411 | if (0 == retval) | ||
412 | break; | ||
413 | |||
414 | /* -ERESTARTSYS as signal hit process */ | 410 | /* -ERESTARTSYS as signal hit process */ |
415 | goto free_old_hdr; | 411 | goto free_old_hdr; |
416 | } | 412 | } |
@@ -801,25 +797,21 @@ sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg) | |||
801 | 1, read_only, 1, &srp); | 797 | 1, read_only, 1, &srp); |
802 | if (result < 0) | 798 | if (result < 0) |
803 | return result; | 799 | return result; |
804 | while (1) { | 800 | result = 0; /* following macro to beat race condition */ |
805 | result = 0; /* following macro to beat race condition */ | 801 | __wait_event_interruptible(sfp->read_wait, |
806 | __wait_event_interruptible(sfp->read_wait, | 802 | (srp->done || sdp->detached), result); |
807 | (srp->done || sdp->detached), | 803 | if (sdp->detached) |
808 | result); | 804 | return -ENODEV; |
809 | if (sdp->detached) | 805 | write_lock_irq(&sfp->rq_list_lock); |
810 | return -ENODEV; | 806 | if (srp->done) { |
811 | write_lock_irq(&sfp->rq_list_lock); | 807 | srp->done = 2; |
812 | if (srp->done) { | ||
813 | srp->done = 2; | ||
814 | write_unlock_irq(&sfp->rq_list_lock); | ||
815 | break; | ||
816 | } | ||
817 | srp->orphan = 1; | ||
818 | write_unlock_irq(&sfp->rq_list_lock); | 808 | write_unlock_irq(&sfp->rq_list_lock); |
819 | return result; /* -ERESTARTSYS because signal hit process */ | 809 | result = sg_new_read(sfp, p, SZ_SG_IO_HDR, srp); |
810 | return (result < 0) ? result : 0; | ||
820 | } | 811 | } |
821 | result = sg_new_read(sfp, p, SZ_SG_IO_HDR, srp); | 812 | srp->orphan = 1; |
822 | return (result < 0) ? result : 0; | 813 | write_unlock_irq(&sfp->rq_list_lock); |
814 | return result; /* -ERESTARTSYS because signal hit process */ | ||
823 | case SG_SET_TIMEOUT: | 815 | case SG_SET_TIMEOUT: |
824 | result = get_user(val, ip); | 816 | result = get_user(val, ip); |
825 | if (result) | 817 | if (result) |