Skip to content
  • Mike Snitzer's avatar
    dm: do not initialise full request queue when bio based · 4a0b4ddf
    Mike Snitzer authored
    
    
    Change bio-based mapped devices no longer to have a fully initialized
    request_queue (request_fn, elevator, etc).  This means bio-based DM
    devices no longer register elevator sysfs attributes ('iosched/' tree
    or 'scheduler' other than "none").
    
    In contrast, a request-based DM device will continue to have a full
    request_queue and will register elevator sysfs attributes.  Therefore
    a user can determine a DM device's type by checking if elevator sysfs
    attributes exist.
    
    First allocate a minimalist request_queue structure for a DM device
    (needed for both bio and request-based DM).
    
    Initialization of a full request_queue is deferred until it is known
    that the DM device is request-based, at the end of the table load
    sequence.
    
    Factor DM device's request_queue initialization:
    - common to both request-based and bio-based into dm_init_md_queue().
    - specific to request-based into dm_init_request_based_queue().
    
    The md->type_lock mutex is used to protect md->queue, in addition to
    md->type, during table_load().
    
    A DM device's first table_load will establish the immutable md->type.
    But md->queue initialization, based on md->type, may fail at that time
    (because blk_init_allocated_queue cannot allocate memory).  Therefore
    any subsequent table_load must (re)try dm_setup_md_queue independently of
    establishing md->type.
    
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    Acked-by: default avatarKiyoshi Ueda <k-ueda@ct.jp.nec.com>
    Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
    4a0b4ddf