[Linux-cachefs] Re: [Cachefs] FYI: Higmem crash in cachefs

David Howells dhowells at redhat.com
Mon Oct 4 12:41:10 UTC 2004


> its BUG-ing out in kmap_atomic():

Try using the attached patch. It clears up some more kmap->kmap_atomic
conversion errors and makes another conversion that I missed.

David

-------------- next part --------------
diff -ur linux-2.6.9-rc2-mm4/fs/cachefs/journal.c linux-2.6.9-rc2-mm4-fscache/fs/cachefs/journal.c
--- linux-2.6.9-rc2-mm4/fs/cachefs/journal.c	2004-09-27 11:23:55.000000000 +0100
+++ linux-2.6.9-rc2-mm4-fscache/fs/cachefs/journal.c	2004-10-04 13:29:58.973852750 +0100
@@ -430,7 +430,7 @@
 	offset = (trans->index << super->sb->s_blocksize_bits) & ~PAGE_MASK;
 	jentry = kmap_atomic(trans->jpage, KM_USER0) + offset;
 	memcpy(jentry, trans->jentry, super->sb->s_blocksize);
-	kunmap_atomic(trans->jpage, KM_USER0);
+	kunmap_atomic(jentry, KM_USER0);
 
 	SetPageWriteback(trans->jpage);
 
diff -ur linux-2.6.9-rc2-mm4/fs/cachefs/replay.c linux-2.6.9-rc2-mm4-fscache/fs/cachefs/replay.c
--- linux-2.6.9-rc2-mm4/fs/cachefs/replay.c	2004-09-27 11:23:56.000000000 +0100
+++ linux-2.6.9-rc2-mm4-fscache/fs/cachefs/replay.c	2004-10-04 13:33:04.681820540 +0100
@@ -1638,7 +1638,7 @@
 
 			cachefs_trans_replays_effect(trans, ptrblock, "ptr");
 		}
-		kunmap_atomic(ptrpage, KM_USER0);
+		kunmap_atomic(pbix, KM_USER0);
 	}
 
 	/* make sure the vjournal entry is cleared */
diff -ur linux-2.6.9-rc2-mm4/fs/cachefs/vjournal.c linux-2.6.9-rc2-mm4-fscache/fs/cachefs/vjournal.c
--- linux-2.6.9-rc2-mm4/fs/cachefs/vjournal.c	2004-09-27 11:23:56.000000000 +0100
+++ linux-2.6.9-rc2-mm4-fscache/fs/cachefs/vjournal.c	2004-10-04 13:34:40.114592740 +0100
@@ -307,7 +307,7 @@
 	ptr = kmap_atomic(vjentry->vpage, KM_USER0);
 	memset(ptr + vjentry->ventry, 0,
 	       sizeof(struct cachefs_ondisc_validity_journal));
-	kunmap_atomic(vjentry->vpage, KM_USER0);
+	kunmap_atomic(ptr, KM_USER0);
 
 	/* queue the transaction to be written to disc */
 	cachefs_trans_commit(trans);
@@ -606,10 +606,10 @@
 
 		/* get the block number for this level */
 		if (!step->bix) {
-			u8 *data = kmap(step[1].page);
+			u8 *data = kmap_atomic(step[1].page, KM_USER0);
 			step->bix =
 				*(cachefs_blockix_t *)(data + step->offset);
-			kunmap(step[1].page);
+			kunmap_atomic(data, KM_USER0);
 		}
 
 		/* allocate this block if necessary */


More information about the Linux-cachefs mailing list