Sophie

Sophie

distrib > Mandriva > 8.2 > i586 > media > main-src > by-pkgid > 276c4c69ed5efcebe43ee6121194cf59 > files > 59

kernel22-2.2.20-9mdk.src.rpm

diff -urN 2.2.18pre19aa1/fs/buffer.c z/fs/buffer.c
--- 2.2.18pre19aa1/fs/buffer.c	Sat Nov  4 05:50:05 2000
+++ z/fs/buffer.c	Sat Nov  4 06:03:26 2000
@@ -482,7 +482,12 @@
 static void put_last_free(struct buffer_head * bh)
 {
 	if (bh) {
-		struct buffer_head **bhp = &free_list[BUFSIZE_INDEX(bh->b_size)];
+		struct buffer_head **bhp;
+
+		if (bh->b_rm_fn) 
+			bh->b_rm_fn(bh);
+
+		bhp = &free_list[BUFSIZE_INDEX(bh->b_size)];
 
 		bh->b_count = 0;
 		bh->b_state = 0;
@@ -736,6 +741,8 @@
 	bh->b_blocknr = block;
 	bh->b_end_io = handler;
 	bh->b_dev_id = dev_id;
+	bh->b_pdata = NULL;
+	bh->b_rm_fn = NULL;
 }
 
 static void end_buffer_io_sync(struct buffer_head *bh, int uptodate)
@@ -1017,6 +1024,9 @@
  */
 static void put_unused_buffer_head(struct buffer_head * bh)
 {
+	if (bh->b_rm_fn != NULL)
+		bh->b_rm_fn(bh);
+
 	if (nr_unused_buffer_heads >= MAX_UNUSED_BUFFERS) {
 		nr_buffer_heads--;
 		kmem_cache_free(bh_cachep, bh);
@@ -1148,6 +1158,8 @@
 
 		bh->b_data = (char *) (page+offset);
 		bh->b_list = 0;
+		bh->b_pdata = NULL;
+		bh->b_rm_fn = NULL;
 	}
 	return head;
 /*
@@ -1931,6 +1943,7 @@
 		bh = kmem_cache_alloc(bh_cachep, SLAB_ATOMIC);
 		if (!bh)
 			break;
+		memset(bh, 0, sizeof(*bh));
 		put_unused_buffer_head(bh);
 		nr_buffer_heads++;
 	}
diff -urN 2.2.18pre19aa1/include/linux/fs.h z/include/linux/fs.h
--- 2.2.18pre19aa1/include/linux/fs.h	Sat Nov  4 05:50:05 2000
+++ z/include/linux/fs.h	Sat Nov  4 06:00:56 2000
@@ -227,6 +227,8 @@
 	 */
 	void (*b_end_io)(struct buffer_head *bh, int uptodate);
 	void *b_dev_id;
+	void *b_pdata;
+	void (*b_rm_fn)(struct buffer_head *bh);
 };
 
 typedef void (bh_end_io_t)(struct buffer_head *bh, int uptodate);