alistair23-linux/drivers/block
Jiri Kosina e0c0978699 ataflop: remove buggy/commented-out IRQ disable from do_fd_request()
There is a nice gem in drivers/block/ataflop.c::do_fd_request()

      void do_fd_request(struct request_queue * q)
      {
              unsigned long flags;

              DPRINT(("do_fd_request for pid %d\n",current->pid));
              while( fdc_busy ) sleep_on( &fdc_wait );
              fdc_busy = 1;
              stdma_lock(floppy_irq, NULL);

              atari_disable_irq( IRQ_MFP_FDC );
              local_save_flags(flags);        /* The request function is called with ints
              local_irq_disable();             * disabled... so must save the IPL for later */
              redo_fd_request();
              local_irq_restore(flags);
              atari_enable_irq( IRQ_MFP_FDC );
      }

If you look at the code long enough, you will notioce that the
local_irq_disable() call is actually commented out. This has been
introduced back in 2002 in [1], but as you can see, the same bug has been
there even before, with the sti() call being commented out in the very
same way :)

I am not familiar with the code myself at all, but I guess that the whole
stuff can just be removed. Why do we need save_flags/restore_flags at all,
without actually disabling the local IRQs afterwards? The
redo_fd_request() doesn't seem to do anything that would mess with flags
inconsistently.

[1] http://lkml.org/lkml/2002/12/27/58

Jens:
That does look odd. The comment is correct that the function is entered
with interrupts disabled (and the queue lock held). So I'd say your
patch looks fine, the whole save/restore business looks meaningless.

Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Acked-by: Jens Axboe <jens.axboe@oracle.com>
Acked-by: Michael Schmitz <schmitz@biophys.uni-duesseldorf.de>
2009-11-09 09:40:57 +01:00
..
aoe const: make block_device_operations const 2009-09-22 07:17:25 -07:00
paride const: make block_device_operations const 2009-09-22 07:17:25 -07:00
amiflop.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
ataflop.c ataflop: remove buggy/commented-out IRQ disable from do_fd_request() 2009-11-09 09:40:57 +01:00
brd.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
cciss.c cciss: Add cciss_allow_hpsa module parameter 2009-10-13 09:18:22 +02:00
cciss.h cciss: Dynamically allocate the drive_info_struct for each logical drive. 2009-10-01 21:15:45 +02:00
cciss_cmd.h cciss: Ignore stale commands after reboot 2009-07-03 21:06:45 +02:00
cciss_scsi.c cciss: decode unit attention in SCSI error handling code 2009-06-09 05:47:44 +02:00
cciss_scsi.h cciss: Fix cciss SCSI rescan code to better notice device changes 2008-10-09 08:56:18 +02:00
cpqarray.c cpqarray: switch to seq_file 2009-10-01 21:15:40 +02:00
cpqarray.h
cryptoloop.c drivers: Remove unnecessary inclusions of asm/semaphore.h 2008-04-18 22:16:32 -04:00
DAC960.c dac960: switch to seq_file 2009-10-01 21:15:40 +02:00
DAC960.h Fix DAC960 driver on machines which don't support 64-bit DMA 2007-09-11 17:21:19 -07:00
floppy.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
hd.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
ida_cmd.h
ida_ioctl.h
Kconfig osdblk: a Linux block device for OSD objects 2009-06-24 12:25:02 +03:00
loop.c loop: fix NULL dereference if mount fails 2009-10-29 07:39:27 -07:00
Makefile osdblk: a Linux block device for OSD objects 2009-06-24 12:25:02 +03:00
mg_disk.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
nbd.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
osdblk.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
pktcdvd.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
ps3disk.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
ps3vram.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
smart1,2.h
sunvdc.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
swim.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
swim3.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2009-09-22 07:51:45 -07:00
swim_asm.S m68k: mac - Add SWIM floppy support 2009-03-26 21:15:27 +01:00
sx8.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
ub.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
umem.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
umem.h drivers/block/umem: trim trailing whitespace 2007-10-10 09:25:59 +02:00
viodasd.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
virtio_blk.c virtio_blk: Revert serial number support 2009-10-22 16:39:30 +10:30
xd.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
xd.h [PATCH] switch xd 2008-10-21 07:48:11 -04:00
xen-blkfront.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
xsysace.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00
z2ram.c const: make block_device_operations const 2009-09-22 07:17:25 -07:00