On Sun, Apr 28, 2013 at 08:54:46AM +0800, Shaohua Li wrote:
> On Sat, Apr 27, 2013 at 06:29:49PM +0200, Markus wrote:
> > Hi!
> > 
> > Now I had the time to bisect, started with 3.7 as good and 3.8 as bad.
> > 0cfbcafcae8b7364b5fa96c2b26ccde7a3a296a9 is the bad commit. [1]
> > block: add plug for blkdev_issue_discard
> > 
> > While 3.8.10 was still bad, the same kernel with the reverted patch applied 
> > is fine.
> Thanks for the reporting. Does below patch work for you?
Oops, there is a typo there, should be this one:

---
 drivers/md/raid1.c  |    7 ++++++-
 drivers/md/raid10.c |    7 ++++++-
 2 files changed, 12 insertions(+), 2 deletions(-)

Index: linux/drivers/md/raid1.c
===================================================================
--- linux.orig/drivers/md/raid1.c       2013-03-07 14:14:05.950824173 +0800
+++ linux/drivers/md/raid1.c    2013-04-28 08:57:17.874058434 +0800
@@ -981,7 +981,12 @@ static void raid1_unplug(struct blk_plug
        while (bio) { /* submit pending writes */
                struct bio *next = bio->bi_next;
                bio->bi_next = NULL;
-               generic_make_request(bio);
+               if (unlikely((bio->bi_rw & REQ_DISCARD) &&
+                   !blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
+                       /* Just ignore it */
+                       bio_endio(bio, 0);
+               else
+                       generic_make_request(bio);
                bio = next;
        }
        kfree(plug);
Index: linux/drivers/md/raid10.c
===================================================================
--- linux.orig/drivers/md/raid10.c      2013-03-07 14:14:05.950824173 +0800
+++ linux/drivers/md/raid10.c   2013-04-28 08:57:44.765719067 +0800
@@ -1133,7 +1133,12 @@ static void raid10_unplug(struct blk_plu
        while (bio) { /* submit pending writes */
                struct bio *next = bio->bi_next;
                bio->bi_next = NULL;
-               generic_make_request(bio);
+               if (unlikely((bio->bi_rw & REQ_DISCARD) &&
+                   !blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
+                       /* Just ignore it */
+                       bio_endio(bio, 0);
+               else
+                       generic_make_request(bio);
                bio = next;
        }
        kfree(plug);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to