From 0676c0da184a99505fc0cde583d0885cd748a2cb Mon Sep 17 00:00:00 2001 From: FUJITA Tomonori Date: Fri, 4 Jul 2008 09:31:11 +0200 Subject: [PATCH] --- yaml --- r: 98913 b: refs/heads/master c: 30c00eda73d5db5bd64dd0c370161abd8df5ba4a h: refs/heads/master i: 98911: 9d92f3f2570c17dbff5a2dc14d497352a64db553 v: v3 --- [refs] | 2 +- trunk/block/blk-map.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 6046a7dd46ed..5bf618c7621c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 27f8221af406e43b529a5425bc99c9b1e9bdf521 +refs/heads/master: 30c00eda73d5db5bd64dd0c370161abd8df5ba4a diff --git a/trunk/block/blk-map.c b/trunk/block/blk-map.c index 813011ef8276..ddd96fb11a7d 100644 --- a/trunk/block/blk-map.c +++ b/trunk/block/blk-map.c @@ -269,6 +269,7 @@ int blk_rq_map_kern(struct request_queue *q, struct request *rq, void *kbuf, int reading = rq_data_dir(rq) == READ; int do_copy = 0; struct bio *bio; + unsigned long stack_mask = ~(THREAD_SIZE - 1); if (len > (q->max_hw_sectors << 9)) return -EINVAL; @@ -279,6 +280,10 @@ int blk_rq_map_kern(struct request_queue *q, struct request *rq, void *kbuf, alignment = queue_dma_alignment(q) | q->dma_pad_mask; do_copy = ((kaddr & alignment) || (len & alignment)); + if (!((kaddr & stack_mask) ^ + ((unsigned long)current->stack & stack_mask))) + do_copy = 1; + if (do_copy) bio = bio_copy_kern(q, kbuf, len, gfp_mask, reading); else