Re: 2.6.20-rc6-mm1

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Jiri Slaby <jirislaby@...>, <linux-kernel@...>, Ingo Molnar <mingo@...>, Miles Lane <miles.lane@...>, Anton Altaparmakov <aia21@...>
Cc: Pierre Ossman <drzeus@...>, <linux-scsi@...>, James Bottomley <James.Bottomley@...>, Jens Axboe <axboe@...>
Date: Tuesday, January 30, 2007 - 3:30 pm

On Mon, 29 Jan 2007 23:27:27 -0800
Andrew Morton <akpm@osdl.org> wrote:


Actually, this isn't related to softirq-vs-hardirq.  Most interrupt
handlers are interruptible, so the rule is simply that KM_BIO_SRC_IRQ must
always be taken under local_irq_disable().

A quick scan indicates that the following files might be buggy in this
regard:

drivers/mmc/wbsd.c
drivers/mmc/at91_mci.c
drivers/mmc/sdhci.c
drivers/scsi/scsi_lib.c when called from stex.c
fs/ntfs/aops.c

Happily, KM_BIO_DST_IRQ has no users and can presumably be removed.


Fixes for stex and ntfs follow.


From: Andrew Morton <akpm@osdl.org>

The KM_BIO_SRC_IRQ kmap slot requires local irq protection.

Cc: James Bottomley <James.Bottomley@steeleye.com>
Cc: Ed Lin <ed.lin@promise.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 drivers/scsi/stex.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff -puN drivers/scsi/stex.c~stex-kmap_atomic-atomicity-fix drivers/scsi/stex.c
--- a/drivers/scsi/stex.c~stex-kmap_atomic-atomicity-fix
+++ a/drivers/scsi/stex.c
@@ -459,15 +459,19 @@ static void stex_internal_copy(struct sc
 		*count = cmd->request_bufflen;
 	lcount = *count;
 	while (lcount) {
+		unsigned long flags = flags;	/* Suppress uninit warning */
+
 		len = lcount;
 		s = (void *)src;
 		if (cmd->use_sg) {
 			size_t offset = *count - lcount;
 			s += offset;
+			local_irq_save(flags);
 			base = scsi_kmap_atomic_sg(cmd->request_buffer,
 				sg_count, &offset, &len);
 			if (base == NULL) {
 				*count -= lcount;
+				local_irq_restore(flags);
 				return;
 			}
 			d = base + offset;
@@ -480,8 +484,10 @@ static void stex_internal_copy(struct sc
 			memcpy(s, d, len);
 
 		lcount -= len;
-		if (cmd->use_sg)
+		if (cmd->use_sg) {
 			scsi_kunmap_atomic_sg(base);
+			local_irq_restore(flags);
+		}
 	}
 }
 
_



From: Andrew Morton <akpm@osdl.org>

The KM_BIO_SRC_IRQ kmap slot requires local irq protection.

Cc: Anton Altaparmakov <aia21@cantab.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 fs/ntfs/aops.c |    6 ++++++
 1 file changed, 6 insertions(+)

diff -puN fs/ntfs/aops.c~ntfs-kmap_atomic-atomicity-fix fs/ntfs/aops.c
--- a/fs/ntfs/aops.c~ntfs-kmap_atomic-atomicity-fix
+++ a/fs/ntfs/aops.c
@@ -88,14 +88,17 @@ static void ntfs_end_buffer_async_read(s
 		if (unlikely(file_ofs + bh->b_size > init_size)) {
 			u8 *kaddr;
 			int ofs;
+			unsigned long flags;
 
 			ofs = 0;
 			if (file_ofs < init_size)
 				ofs = init_size - file_ofs;
+			local_irq_save(flags);
 			kaddr = kmap_atomic(page, KM_BIO_SRC_IRQ);
 			memset(kaddr + bh_offset(bh) + ofs, 0,
 					bh->b_size - ofs);
 			kunmap_atomic(kaddr, KM_BIO_SRC_IRQ);
+			local_irq_restore(flags);
 			flush_dcache_page(page);
 		}
 	} else {
@@ -138,16 +141,19 @@ static void ntfs_end_buffer_async_read(s
 		u8 *kaddr;
 		unsigned int i, recs;
 		u32 rec_size;
+		unsigned long flags;
 
 		rec_size = ni->itype.index.block_size;
 		recs = PAGE_CACHE_SIZE / rec_size;
 		/* Should have been verified before we got here... */
 		BUG_ON(!recs);
+		local_irq_save(flags);
 		kaddr = kmap_atomic(page, KM_BIO_SRC_IRQ);
 		for (i = 0; i < recs; i++)
 			post_read_mst_fixup((NTFS_RECORD*)(kaddr +
 					i * rec_size), rec_size);
 		kunmap_atomic(kaddr, KM_BIO_SRC_IRQ);
+		local_irq_restore(flags);
 		flush_dcache_page(page);
 		if (likely(page_uptodate && !PageError(page)))
 			SetPageUptodate(page);
_

-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
2.6.20-rc6-mm1, Andrew Morton, (Sun Jan 28, 3:49 am)
[-mm patch] fs/proc/: make code static, Adrian Bunk, (Tue Feb 6, 6:12 pm)
[RFC: -mm patch] #if 0 v4l_printk_ioctl_arg(), Adrian Bunk, (Mon Jan 29, 9:12 pm)
[RFC: -mm patch] CONFIG_INPUT_DEBUG improvements, Adrian Bunk, (Mon Jan 29, 9:11 pm)
Re: [RFC: -mm patch] CONFIG_INPUT_DEBUG improvements, Jiri Kosina, (Tue Jan 30, 11:07 am)
Re: [RFC: -mm patch] CONFIG_INPUT_DEBUG improvements, Adrian Bunk, (Tue Jan 30, 11:13 am)
[-mm patch] cx88-video.c: remove struct radionorms, Adrian Bunk, (Mon Jan 29, 9:11 pm)
[-mm patch] vmi: cleanups, Adrian Bunk, (Mon Jan 29, 9:11 pm)
Re: [-mm patch] vmi: cleanups, Zachary Amsden, (Tue Jan 30, 12:56 am)
[PATCH -mm] fix DocBook build, Don Mullis, (Sun Jan 28, 10:50 pm)
Re: 2.6.20-rc6-mm1, Michal Piotrowski, (Sun Jan 28, 6:31 pm)
Re: 2.6.20-rc6-mm1, Herbert Xu, (Mon Jan 29, 1:17 am)
Re: 2.6.20-rc6-mm1, Herbert Xu, (Mon Jan 29, 1:29 am)
Re: 2.6.20-rc6-mm1, Andrew Morton, (Mon Jan 29, 2:43 am)
Re: 2.6.20-rc6-mm1, Herbert Xu, (Mon Jan 29, 3:21 am)
Re: 2.6.20-rc6-mm1, Ingo Molnar, (Mon Jan 29, 4:35 am)
Re: 2.6.20-rc6-mm1, Andrew Morton, (Sun Jan 28, 7:10 pm)
Re: 2.6.20-rc6-mm1 (build), Randy Dunlap, (Sun Jan 28, 3:41 pm)
[-mm patch] fix CONFIG_SATA_SIS=y compile error, Adrian Bunk, (Sun Jan 28, 3:04 pm)
Re: 2.6.20-rc6-mm1, Martin J. Bligh, (Sun Jan 28, 1:04 pm)
Re: 2.6.20-rc6-mm1, Martin J. Bligh, (Sun Jan 28, 1:02 pm)
Re: 2.6.20-rc6-mm1, Martin J. Bligh, (Sun Jan 28, 12:56 pm)
Re: 2.6.20-rc6-mm1, Andrew Morton, (Sun Jan 28, 7:01 pm)
Re: 2.6.20-rc6-mm1, Suparna Bhattacharya, (Mon Jan 29, 10:42 pm)
Re: 2.6.20-rc6-mm1, Andrew Morton, (Mon Jan 29, 10:42 pm)
Re: 2.6.20-rc6-mm1, Martin Bligh, (Mon Jan 29, 11:26 pm)
Re: 2.6.20-rc6-mm1, Martin J. Bligh, (Sun Jan 28, 7:23 pm)
Re: 2.6.20-rc6-mm1, Andrew Morton, (Sun Jan 28, 7:38 pm)
elevator oops [Was: 2.6.20-rc6-mm1], Jiri Slaby, (Sun Jan 28, 7:01 am)
Re: elevator oops [Was: 2.6.20-rc6-mm1], Jens Axboe, (Mon Feb 5, 7:54 am)
Re: elevator oops [Was: 2.6.20-rc6-mm1], Jiri Slaby, (Sun Jan 28, 1:41 pm)
Re: 2.6.20-rc6-mm1, Jiri Slaby, (Sun Jan 28, 6:25 am)
Re: 2.6.20-rc6-mm1, Andrew Morton, (Tue Jan 30, 3:27 am)
Re: 2.6.20-rc6-mm1, Andrew Morton, (Tue Jan 30, 3:30 pm)
Re: 2.6.20-rc6-mm1, Anton Altaparmakov, (Tue Jan 30, 4:50 pm)
Re: 2.6.20-rc6-mm1, Pierre Ossman, (Tue Jan 30, 4:22 pm)
Re: 2.6.20-rc6-mm1, Jiri Slaby, (Tue Jan 30, 4:10 pm)
Unable to select IPV6 [Was: 2.6.20-rc6-mm1], Jiri Slaby, (Sun Jan 28, 6:08 am)
[-mm patch] fix GFS2 circular dependency, Adrian Bunk, (Sun Jan 28, 12:19 pm)
Re: [-mm patch] fix GFS2 circular dependency, Steven Whitehouse, (Mon Jan 29, 5:12 am)
Re: [-mm patch] fix GFS2 circular dependency, Randy Dunlap, (Sun Jan 28, 9:55 pm)