--- /dev/null
+From stable-bounces@linux.kernel.org Thu Jan 12 19:27:22 2006
+Date: Mon, 9 Jan 2006 11:15:33 -0800
+From: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
+Subject: [BLOCK] Kill blk_attempt_remerge()
+
+From: Jens Axboe <axboe@suse.de>
+
+[BLOCK] Kill blk_attempt_remerge()
+
+It's a broken interface, it's done way too late. And apparently it triggers
+slab problems in recent kernels as well (most likely after the generic dispatch
+code was merged). So kill it, ide-cd is the only user of it.
+
+Signed-off-by: Jens Axboe <axboe@suse.de>
+chrisw: backport to 2.6.15 tree
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+
+ block/ll_rw_blk.c | 24 ------------------------
+ drivers/ide/ide-cd.c | 10 ----------
+ include/linux/blkdev.h | 1 -
+ 3 files changed, 35 deletions(-)
+
+--- linux-2.6.15.y.orig/block/ll_rw_blk.c
++++ linux-2.6.15.y/block/ll_rw_blk.c
+@@ -2609,30 +2609,6 @@ static inline int attempt_front_merge(re
+ return 0;
+ }
+
+-/**
+- * blk_attempt_remerge - attempt to remerge active head with next request
+- * @q: The &request_queue_t belonging to the device
+- * @rq: The head request (usually)
+- *
+- * Description:
+- * For head-active devices, the queue can easily be unplugged so quickly
+- * that proper merging is not done on the front request. This may hurt
+- * performance greatly for some devices. The block layer cannot safely
+- * do merging on that first request for these queues, but the driver can
+- * call this function and make it happen any way. Only the driver knows
+- * when it is safe to do so.
+- **/
+-void blk_attempt_remerge(request_queue_t *q, struct request *rq)
+-{
+- unsigned long flags;
+-
+- spin_lock_irqsave(q->queue_lock, flags);
+- attempt_back_merge(q, rq);
+- spin_unlock_irqrestore(q->queue_lock, flags);
+-}
+-
+-EXPORT_SYMBOL(blk_attempt_remerge);
+-
+ static int __make_request(request_queue_t *q, struct bio *bio)
+ {
+ struct request *req;
+--- linux-2.6.15.y.orig/drivers/ide/ide-cd.c
++++ linux-2.6.15.y/drivers/ide/ide-cd.c
+@@ -1332,8 +1332,6 @@ static ide_startstop_t cdrom_start_read
+ if (cdrom_read_from_buffer(drive))
+ return ide_stopped;
+
+- blk_attempt_remerge(drive->queue, rq);
+-
+ /* Clear the local sector buffer. */
+ info->nsectors_buffered = 0;
+
+@@ -1874,14 +1872,6 @@ static ide_startstop_t cdrom_start_write
+ return ide_stopped;
+ }
+
+- /*
+- * for dvd-ram and such media, it's a really big deal to get
+- * big writes all the time. so scour the queue and attempt to
+- * remerge requests, often the plugging will not have had time
+- * to do this properly
+- */
+- blk_attempt_remerge(drive->queue, rq);
+-
+ info->nsectors_buffered = 0;
+
+ /* use dma, if possible. we don't need to check more, since we
+--- linux-2.6.15.y.orig/include/linux/blkdev.h
++++ linux-2.6.15.y/include/linux/blkdev.h
+@@ -559,7 +559,6 @@ extern void register_disk(struct gendisk
+ extern void generic_make_request(struct bio *bio);
+ extern void blk_put_request(struct request *);
+ extern void blk_end_sync_rq(struct request *rq);
+-extern void blk_attempt_remerge(request_queue_t *, struct request *);
+ extern struct request *blk_get_request(request_queue_t *, int, gfp_t);
+ extern void blk_insert_request(request_queue_t *, struct request *, int, void *);
+ extern void blk_requeue_request(request_queue_t *, struct request *);