• Chaitanya Kulkarni's avatar
    nvmet: use inline bio for passthru fast path · dab3902b
    Chaitanya Kulkarni authored
    In nvmet_passthru_execute_cmd() which is a high frequency function
    it uses bio_alloc() which leads to memory allocation from the fs pool
    for each I/O.
    
    For NVMeoF nvmet_req we already have inline_bvec allocated as a part of
    request allocation that can be used with preallocated bio when we
    already know the size of request before bio allocation with bio_alloc(),
    which we already do.
    
    Introduce a bio member for the nvmet_req passthru anon union. In the
    fast path, check if we can get away with inline bvec and bio from
    nvmet_req with bio_init() call before actually allocating from the
    bio_alloc().
    
    This will be useful to avoid any new memory allocation under high
    memory pressure situation and get rid of any extra work of
    allocation (bio_alloc()) vs initialization (bio_init()) when
    transfer len is < NVMET_MAX_INLINE_DATA_LEN that user can configure at
    compile time.
    Signed-off-by: default avatarChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
    Reviewed-by: default avatarLogan Gunthorpe <logang@deltatee.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    dab3902b
passthru.c 15.3 KB