aboutsummaryrefslogtreecommitdiffstats
path: root/fs/bio.c
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2009-04-15 09:10:27 -0400
committerJens Axboe <jens.axboe@oracle.com>2009-04-22 02:35:10 -0400
commita9e9dc24bbc3e084450a22cf4fb82f5f5d4cbeea (patch)
treec6d18d969b76f61ebbfa777caf2706af5873a98f /fs/bio.c
parent451a9ebf653d28337ba53ed5b4b70b0b9543cca1 (diff)
bio: use bio_kmalloc() in copy/map functions
Impact: remove possible deadlock condition There is no reason to use mempool backed allocation for map functions. Also, because kern mapping is used inside LLDs (e.g. for EH), using mempool backed allocation can lead to deadlock under extreme conditions (mempool already consumed by the time a request reached EH and requests are blocked on EH). Switch copy/map functions to bio_kmalloc(). Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'fs/bio.c')
-rw-r--r--fs/bio.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/bio.c b/fs/bio.c
index d35588fd6d57..7bbc98f0eda1 100644
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -822,7 +822,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q,
822 return ERR_PTR(-ENOMEM); 822 return ERR_PTR(-ENOMEM);
823 823
824 ret = -ENOMEM; 824 ret = -ENOMEM;
825 bio = bio_alloc(gfp_mask, nr_pages); 825 bio = bio_kmalloc(gfp_mask, nr_pages);
826 if (!bio) 826 if (!bio)
827 goto out_bmd; 827 goto out_bmd;
828 828
@@ -946,7 +946,7 @@ static struct bio *__bio_map_user_iov(struct request_queue *q,
946 if (!nr_pages) 946 if (!nr_pages)
947 return ERR_PTR(-EINVAL); 947 return ERR_PTR(-EINVAL);
948 948
949 bio = bio_alloc(gfp_mask, nr_pages); 949 bio = bio_kmalloc(gfp_mask, nr_pages);
950 if (!bio) 950 if (!bio)
951 return ERR_PTR(-ENOMEM); 951 return ERR_PTR(-ENOMEM);
952 952
@@ -1130,7 +1130,7 @@ static struct bio *__bio_map_kern(struct request_queue *q, void *data,
1130 int offset, i; 1130 int offset, i;
1131 struct bio *bio; 1131 struct bio *bio;
1132 1132
1133 bio = bio_alloc(gfp_mask, nr_pages); 1133 bio = bio_kmalloc(gfp_mask, nr_pages);
1134 if (!bio) 1134 if (!bio)
1135 return ERR_PTR(-ENOMEM); 1135 return ERR_PTR(-ENOMEM);
1136 1136