Skip to content
Snippets Groups Projects
Select Git revision
  • 0b2dc83906cf1e694e48003eae5df8fa63f76fd9
  • linus-master default
  • kunit_is_love
  • kunit_drm
  • tonyk/futex_waitv
  • hidraw_rwlock
  • futex_waitv
  • futex2-dev
  • idle_sleep
  • futex2-proton
  • futex-tests
  • futex2
  • futex2-numa
  • fwm-5.11
  • cf-fix
  • tmpfs-ic
  • futex2-stable-5.11
  • futex2-stable
  • futex2-lpc
  • gaming
  • futex-fixes
21 results

sock_map.c

Blame
  • bio.c 39.09 KiB
    /*
     * Copyright (C) 2001 Jens Axboe <axboe@kernel.dk>
     *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License version 2 as
     * published by the Free Software Foundation.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public Licens
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-
     *
     */
    #include <linux/mm.h>
    #include <linux/swap.h>
    #include <linux/bio.h>
    #include <linux/blkdev.h>
    #include <linux/slab.h>
    #include <linux/init.h>
    #include <linux/kernel.h>
    #include <linux/module.h>
    #include <linux/mempool.h>
    #include <linux/workqueue.h>
    #include <scsi/sg.h>		/* for struct sg_iovec */
    
    #include <trace/events/block.h>
    
    /*
     * Test patch to inline a certain number of bi_io_vec's inside the bio
     * itself, to shrink a bio data allocation from two mempool calls to one
     */
    #define BIO_INLINE_VECS		4
    
    static mempool_t *bio_split_pool __read_mostly;
    
    /*
     * if you change this list, also change bvec_alloc or things will
     * break badly! cannot be bigger than what you can fit into an
     * unsigned short
     */
    #define BV(x) { .nr_vecs = x, .name = "biovec-"__stringify(x) }
    struct biovec_slab bvec_slabs[BIOVEC_NR_POOLS] __read_mostly = {
    	BV(1), BV(4), BV(16), BV(64), BV(128), BV(BIO_MAX_PAGES),
    };
    #undef BV
    
    /*
     * fs_bio_set is the bio_set containing bio and iovec memory pools used by
     * IO code that does not need private memory pools.
     */
    struct bio_set *fs_bio_set;
    
    /*
     * Our slab pool management
     */
    struct bio_slab {
    	struct kmem_cache *slab;
    	unsigned int slab_ref;
    	unsigned int slab_size;
    	char name[8];
    };
    static DEFINE_MUTEX(bio_slab_lock);
    static struct bio_slab *bio_slabs;
    static unsigned int bio_slab_nr, bio_slab_max;
    
    static struct kmem_cache *bio_find_or_create_slab(unsigned int extra_size)