projects
/
deliverable
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[MMC] sdhci: correct register order
[deliverable/linux.git]
/
fs
/
bio.c
diff --git
a/fs/bio.c
b/fs/bio.c
index 0a8c59cb68f527fd98152d12a10ef1eb2e7f049c..6a0b9ad8f8c9d031d4c32fb32e1c53e0677d1ef2 100644
(file)
--- a/
fs/bio.c
+++ b/
fs/bio.c
@@
-30,7
+30,7
@@
#define BIO_POOL_SIZE 256
#define BIO_POOL_SIZE 256
-static kmem_cache_t *bio_slab;
+static kmem_cache_t *bio_slab
__read_mostly
;
#define BIOVEC_NR_POOLS 6
#define BIOVEC_NR_POOLS 6
@@
-39,7
+39,7
@@
static kmem_cache_t *bio_slab;
* basically we just need to survive
*/
#define BIO_SPLIT_ENTRIES 8
* basically we just need to survive
*/
#define BIO_SPLIT_ENTRIES 8
-mempool_t *bio_split_pool;
+mempool_t *bio_split_pool
__read_mostly
;
struct biovec_slab {
int nr_vecs;
struct biovec_slab {
int nr_vecs;
@@
-636,12
+636,10
@@
static struct bio *__bio_map_user_iov(request_queue_t *q,
return ERR_PTR(-ENOMEM);
ret = -ENOMEM;
return ERR_PTR(-ENOMEM);
ret = -ENOMEM;
- pages = k
malloc(nr_pages *
sizeof(struct page *), GFP_KERNEL);
+ pages = k
calloc(nr_pages,
sizeof(struct page *), GFP_KERNEL);
if (!pages)
goto out;
if (!pages)
goto out;
- memset(pages, 0, nr_pages * sizeof(struct page *));
-
for (i = 0; i < iov_count; i++) {
unsigned long uaddr = (unsigned long)iov[i].iov_base;
unsigned long len = iov[i].iov_len;
for (i = 0; i < iov_count; i++) {
unsigned long uaddr = (unsigned long)iov[i].iov_base;
unsigned long len = iov[i].iov_len;
@@
-656,9
+654,10
@@
static struct bio *__bio_map_user_iov(request_queue_t *q,
write_to_vm, 0, &pages[cur_page], NULL);
up_read(¤t->mm->mmap_sem);
write_to_vm, 0, &pages[cur_page], NULL);
up_read(¤t->mm->mmap_sem);
- if (ret < local_nr_pages)
+ if (ret < local_nr_pages) {
+ ret = -EFAULT;
goto out_unmap;
goto out_unmap;
-
+ }
offset = uaddr & ~PAGE_MASK;
for (j = cur_page; j < page_limit; j++) {
offset = uaddr & ~PAGE_MASK;
for (j = cur_page; j < page_limit; j++) {
@@
-1118,6
+1117,9
@@
struct bio_pair *bio_split(struct bio *bi, mempool_t *pool, int first_sectors)
bp->bio1.bi_io_vec = &bp->bv1;
bp->bio2.bi_io_vec = &bp->bv2;
bp->bio1.bi_io_vec = &bp->bv1;
bp->bio2.bi_io_vec = &bp->bv2;
+ bp->bio1.bi_max_vecs = 1;
+ bp->bio2.bi_max_vecs = 1;
+
bp->bio1.bi_end_io = bio_pair_end_1;
bp->bio2.bi_end_io = bio_pair_end_2;
bp->bio1.bi_end_io = bio_pair_end_1;
bp->bio2.bi_end_io = bio_pair_end_2;
@@
-1127,16
+1129,6
@@
struct bio_pair *bio_split(struct bio *bi, mempool_t *pool, int first_sectors)
return bp;
}
return bp;
}
-static void *bio_pair_alloc(gfp_t gfp_flags, void *data)
-{
- return kmalloc(sizeof(struct bio_pair), gfp_flags);
-}
-
-static void bio_pair_free(void *bp, void *data)
-{
- kfree(bp);
-}
-
/*
* create memory pools for biovec's in a bio_set.
/*
* create memory pools for biovec's in a bio_set.
@@
-1153,8
+1145,7
@@
static int biovec_create_pools(struct bio_set *bs, int pool_entries, int scale)
if (i >= scale)
pool_entries >>= 1;
if (i >= scale)
pool_entries >>= 1;
- *bvp = mempool_create(pool_entries, mempool_alloc_slab,
- mempool_free_slab, bp->slab);
+ *bvp = mempool_create_slab_pool(pool_entries, bp->slab);
if (!*bvp)
return -ENOMEM;
}
if (!*bvp)
return -ENOMEM;
}
@@
-1186,15
+1177,12
@@
void bioset_free(struct bio_set *bs)
struct bio_set *bioset_create(int bio_pool_size, int bvec_pool_size, int scale)
{
struct bio_set *bioset_create(int bio_pool_size, int bvec_pool_size, int scale)
{
- struct bio_set *bs = k
m
alloc(sizeof(*bs), GFP_KERNEL);
+ struct bio_set *bs = k
z
alloc(sizeof(*bs), GFP_KERNEL);
if (!bs)
return NULL;
if (!bs)
return NULL;
- memset(bs, 0, sizeof(*bs));
- bs->bio_pool = mempool_create(bio_pool_size, mempool_alloc_slab,
- mempool_free_slab, bio_slab);
-
+ bs->bio_pool = mempool_create_slab_pool(bio_pool_size, bio_slab);
if (!bs->bio_pool)
goto bad;
if (!bs->bio_pool)
goto bad;
@@
-1257,8
+1245,8
@@
static int __init init_bio(void)
if (!fs_bio_set)
panic("bio: can't allocate bios\n");
if (!fs_bio_set)
panic("bio: can't allocate bios\n");
- bio_split_pool = mempool_create(BIO_SPLIT_ENTRIES,
-
bio_pair_alloc, bio_pair_free, NULL
);
+ bio_split_pool = mempool_create
_kmalloc_pool
(BIO_SPLIT_ENTRIES,
+
sizeof(struct bio_pair)
);
if (!bio_split_pool)
panic("bio: can't create split pool\n");
if (!bio_split_pool)
panic("bio: can't create split pool\n");
This page took
0.065158 seconds
and
5
git commands to generate.