X-Git-Url: http://git.cascardo.info/?a=blobdiff_plain;f=fs%2Fbio.c;h=72ab251cdb9cd0c527b8c18c58f9ca6bca1ed621;hb=b9e7638a301b1245d4675087a05fa90fb4fa1845;hp=13be075806b6ea072322b93a01e16998dee81024;hpb=56c451f4b583ccdf80c9e676179c9cb49de86745;p=cascardo%2Flinux.git diff --git a/fs/bio.c b/fs/bio.c index 13be075806b6..72ab251cdb9c 100644 --- a/fs/bio.c +++ b/fs/bio.c @@ -302,9 +302,10 @@ void bio_init(struct bio *bio) struct bio *bio_alloc_bioset(gfp_t gfp_mask, int nr_iovecs, struct bio_set *bs) { struct bio *bio = NULL; + void *p; if (bs) { - void *p = mempool_alloc(bs->bio_pool, gfp_mask); + p = mempool_alloc(bs->bio_pool, gfp_mask); if (p) bio = p + bs->front_pad; @@ -329,7 +330,7 @@ struct bio *bio_alloc_bioset(gfp_t gfp_mask, int nr_iovecs, struct bio_set *bs) } if (unlikely(!bvl)) { if (bs) - mempool_free(bio, bs->bio_pool); + mempool_free(p, bs->bio_pool); else kfree(bio); bio = NULL; @@ -859,7 +860,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q, /* * success */ - if (!write_to_vm) { + if (!write_to_vm && (!map_data || !map_data->null_mapped)) { ret = __bio_copy_iov(bio, bio->bi_io_vec, iov, iov_count, 0, 0); if (ret) goto cleanup;