24 Oct, 2008

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/viro/bdev: (66 commits)
    [PATCH] kill the rest of struct file propagation in block ioctls
    [PATCH] get rid of struct file use in blkdev_ioctl() BLKBSZSET
    [PATCH] get rid of blkdev_locked_ioctl()
    [PATCH] get rid of blkdev_driver_ioctl()
    [PATCH] sanitize blkdev_get() and friends
    [PATCH] remember mode of reiserfs journal
    [PATCH] propagate mode through swsusp_close()
    [PATCH] propagate mode through open_bdev_excl/close_bdev_excl
    [PATCH] pass fmode_t to blkdev_put()
    [PATCH] kill the unused bsize on the send side of /dev/loop
    [PATCH] trim file propagation in block/compat_ioctl.c
    [PATCH] end of methods switch: remove the old ones
    [PATCH] switch sr
    [PATCH] switch sd
    [PATCH] switch ide-scsi
    [PATCH] switch tape_block
    [PATCH] switch dcssblk
    [PATCH] switch dasd
    [PATCH] switch mtd_blkdevs
    [PATCH] switch mmc
    ...

    Linus Torvalds
     

22 Oct, 2008

1 commit

  • Move array_too_big to include/linux/device-mapper.h because it is
    used by targets.

    Remove the test from dm-raid1 as the number of mirror legs is limited
    such that it can never fail. (Even for stripes it seems rather
    unlikely.)

    Signed-off-by: Mikulas Patocka
    Signed-off-by: Alasdair G Kergon

    Mikulas Patocka
     

21 Oct, 2008

2 commits


10 Oct, 2008

4 commits


21 Jul, 2008

1 commit

  • Introduce a bvec merge function for device mapper devices
    for dynamic size restrictions.

    This code ensures the requested biovec lies within a single
    target and then calls a target-specific function to check
    against any constraints imposed by underlying devices.

    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     

30 Apr, 2008

1 commit


25 Apr, 2008

3 commits


08 Feb, 2008

1 commit


21 Dec, 2007

1 commit

  • Make sure dm honours max_hw_sectors of underlying devices

    We still have no firm testing evidence in support of this patch but
    believe it may help to resolve some bug reports. - agk

    Signed-off-by: Neil Brown
    Signed-off-by: Alasdair G Kergon

    Neil Brown
     

02 Nov, 2007

1 commit

  • Device mapper uses its own bounce_pfn that may differ from one on underlying
    device. In that way dm can build incorrect requests that contain sg elements
    greater than underlying device is able to handle.

    This is the cause of slab corruption in i2o layer, occurred on i386 arch when
    very long direct IO requests are addressed to dm-over-i2o device.

    Signed-off-by: Vasily Averin
    Cc:
    Cc: Alasdair G Kergon
    Signed-off-by: Andrew Morton
    Signed-off-by: Jens Axboe

    Vasily Averin
     

20 Oct, 2007

2 commits


09 Dec, 2006

3 commits

  • In device-mapper I/O is sometimes queued within targets for later processing.
    For example the multipath target can be configured to store I/O when no paths
    are available instead of returning it -EIO.

    This patch allows the device-mapper core to instruct a target to transfer the
    contents of any such in-target queue back into the core. This frees up the
    resources used by the target so the core can replace that target with an
    alternative one and then resend the I/O to it. Without this patch the only
    way to change the target in such circumstances involves returning the I/O with
    an error back to the filesystem/application. In the multipath case, this
    patch will let us add new paths for existing I/O to try after all the existing
    paths have failed.

    DMF_NOFLUSH_SUSPENDING
    ----------------------

    If the DM_NOFLUSH_FLAG ioctl option is specified at suspend time, the
    DMF_NOFLUSH_SUSPENDING flag is set in md->flags during dm_suspend(). It
    is always cleared before dm_suspend() returns.

    The flag must be visible while the target is flushing pending I/Os so it
    is set before presuspend where the flush starts and unset after the wait
    for md->pending where the flush ends.

    Target drivers can check this flag by calling dm_noflush_suspending().

    DM_MAPIO_REQUEUE / DM_ENDIO_REQUEUE
    -----------------------------------

    A target's map() function can now return DM_MAPIO_REQUEUE to request the
    device mapper core queue the bio.

    Similarly, a target's end_io() function can return DM_ENDIO_REQUEUE to request
    the same. This has been labelled 'pushback'.

    The __map_bio() and clone_endio() functions in the core treat these return
    values as errors and call dec_pending() to end the I/O.

    dec_pending
    -----------

    dec_pending() saves the pushback request in struct dm_io->error. Once all
    the split clones have ended, dec_pending() will put the original bio on
    the md->pushback list. Note that this supercedes any I/O errors.

    It is possible for the suspend with DM_NOFLUSH_FLAG to be aborted while
    in progress (e.g. by user interrupt). dec_pending() checks for this and
    returns -EIO if it happened.

    pushdback list and pushback_lock
    --------------------------------

    The bio is queued on md->pushback temporarily in dec_pending(), and after
    all pending I/Os return, md->pushback is merged into md->deferred in
    dm_suspend() for re-issuing at resume time.

    md->pushback_lock protects md->pushback.
    The lock should be held with irq disabled because dec_pending() can be
    called from interrupt context.

    Queueing bios to md->pushback in dec_pending() must be done atomically
    with the check for DMF_NOFLUSH_SUSPENDING flag. So md->pushback_lock is
    held when checking the flag. Otherwise dec_pending() may queue a bio to
    md->pushback after the interrupted dm_suspend() flushes md->pushback.
    Then the bio would be left in md->pushback.

    Flag setting in dm_suspend() can be done without md->pushback_lock because
    the flag is checked only after presuspend and the set value is already
    made visible via the target's presuspend function.

    The flag can be checked without md->pushback_lock (e.g. the first part of
    the dec_pending() or target drivers), because the flag is checked again
    with md->pushback_lock held when the bio is really queued to md->pushback
    as described above. So even if the flag is cleared after the lockless
    checkings, the bio isn't left in md->pushback but returned to applications
    with -EIO.

    Other notes on the current patch
    --------------------------------

    - md->pushback is added to the struct mapped_device instead of using
    md->deferred directly because md->io_lock which protects md->deferred is
    rw_semaphore and can't be used in interrupt context like dec_pending(),
    and md->io_lock protects the DMF_BLOCK_IO flag of md->flags too.

    - Don't issue lock_fs() in dm_suspend() if the DM_NOFLUSH_FLAG
    ioctl option is specified, because I/Os generated by lock_fs() would be
    pushed back and never return if there were no valid devices.

    - If an error occurs in dm_suspend() after the DMF_NOFLUSH_SUSPENDING
    flag is set, md->pushback must be flushed because I/Os may be queued to
    the list already. (flush_and_out label in dm_suspend())

    Test results
    ------------

    I have tested using multipath target with the next patch.

    The following tests are for regression/compatibility:
    - I/Os succeed when valid paths exist;
    - I/Os fail when there are no valid paths and queue_if_no_path is not
    set;
    - I/Os are queued in the multipath target when there are no valid paths and
    queue_if_no_path is set;
    - The queued I/Os above fail when suspend is issued without the
    DM_NOFLUSH_FLAG ioctl option. I/Os spanning 2 multipath targets also
    fail.

    The following tests are for the normal code path of new pushback feature:
    - Queued I/Os in the multipath target are flushed from the target
    but don't return when suspend is issued with the DM_NOFLUSH_FLAG
    ioctl option;
    - The I/Os above are queued in the multipath target again when
    resume is issued without path recovery;
    - The I/Os above succeed when resume is issued after path recovery
    or table load;
    - Queued I/Os in the multipath target succeed when resume is issued
    with the DM_NOFLUSH_FLAG ioctl option after table load. I/Os
    spanning 2 multipath targets also succeed.

    The following tests are for the error paths of the new pushback feature:
    - When the bdget_disk() fails in dm_suspend(), the
    DMF_NOFLUSH_SUSPENDING flag is cleared and I/Os already queued to the
    pushback list are flushed properly.
    - When suspend with the DM_NOFLUSH_FLAG ioctl option is interrupted,
    o I/Os which had already been queued to the pushback list
    at the time don't return, and are re-issued at resume time;
    o I/Os which hadn't been returned at the time return with EIO.

    Signed-off-by: Kiyoshi Ueda
    Signed-off-by: Jun'ichi Nomura
    Signed-off-by: Alasdair G Kergon
    Cc: dm-devel@redhat.com
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kiyoshi Ueda
     
  • Tighten the use of return values from the target map and end_io functions.
    Values of 2 and above are now explictly reserved for future use. There are no
    existing targets using such values.

    The patch has no effect on existing behaviour.

    o Reserve return values of 2 and above from target map functions.
    Any positive value currently indicates "mapping complete", but all
    existing drivers use the value 1. We now make that a requirement
    so we can assign new meaning to higher values in future.

    The new definition of return values from target map functions is:
    < 0 : error
    = 0 : The target will handle the io (DM_MAPIO_SUBMITTED).
    = 1 : Mapping completed (DM_MAPIO_REMAPPED).
    > 1 : Reserved (undefined). Previously this was the same as '= 1'.

    o Reserve return values of 2 and above from target end_io functions
    for similar reasons.
    DM_ENDIO_INCOMPLETE is introduced for a return value of 1.

    Test results:

    I have tested by using the multipath target.

    I/Os succeed when valid paths exist.

    I/Os are queued in the multipath target when there are no valid paths and
    queue_if_no_path is set.

    I/Os fail when there are no valid paths and queue_if_no_path is not set.

    Signed-off-by: Kiyoshi Ueda
    Signed-off-by: Jun'ichi Nomura
    Signed-off-by: Alasdair G Kergon
    Cc: dm-devel@redhat.com
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kiyoshi Ueda
     
  • Change the interface of dm_suspend() so that we can pass several options
    without increasing the number of parameters. The existing 'do_lockfs' integer
    parameter is replaced by a flag DM_SUSPEND_LOCKFS_FLAG.

    There is no functional change to the code.

    Test results:
    I have tested 'dmsetup suspend' command with/without the '--nolockfs'
    option and confirmed the do_lockfs value is correctly set.

    Signed-off-by: Kiyoshi Ueda
    Signed-off-by: Jun'ichi Nomura
    Signed-off-by: Alasdair G Kergon
    Cc: dm-devel@redhat.com
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kiyoshi Ueda
     

03 Oct, 2006

4 commits

  • This patch adds support for a per-target dm_flush_fn method. This is needed
    to allow dm-loop to invalidate page cache mappings in response to BLKFLSBUF
    ioctl commands.

    Signed-off-by: Bryn Reeves
    Signed-off-by: Alasdair G Kergon
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Bryn Reeves
     
  • Separate the setting of device I/O limits from dm_get_device(). dm-loop will
    use this.

    Signed-off-by: Bryn Reeves
    Signed-off-by: Alasdair G Kergon
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Bryn Reeves
     
  • This patch adds a target preresume hook.

    It is called before the targets are resumed and if it returns an error the
    resume gets cancelled.

    The crypt target will use this to indicate that it is unable to process I/O
    because no encryption key has been supplied.

    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Milan Broz
     
  • Extend the core device-mapper infrastructure to accept arbitrary ioctls on a
    mapped device provided that it has exactly one target and it is capable of
    supporting ioctls.

    [We can't use unlocked_ioctl because we need 'inode': 'file' might be NULL.
    Is it worth changing this?]

    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Arnd Bergmann wrote:

    > Am Wednesday 21 June 2006 21:31 schrieb Alasdair G Kergon:
    > > static struct block_device_operations dm_blk_dops = {
    > > .open = dm_blk_open,
    > > .release = dm_blk_close,
    > > +.ioctl = dm_blk_ioctl,
    > > .getgeo = dm_blk_getgeo,
    > > .owner = THIS_MODULE
    >
    > I guess this also needs a ->compat_ioctl method, otherwise it won't
    > work for ioctl numbers that have a compat_ioctl implementation in the
    > low-level device driver.

    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Milan Broz
     

27 Jun, 2006

3 commits

  • Tidy device-mapper error messages to include context information
    automatically.

    Signed-off-by: Alasdair G Kergon
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alasdair G Kergon
     
  • Add a library function dm_create_error_table() to create a table that rejects
    any I/O sent to a device with EIO.

    Signed-off-by: Alasdair G Kergon
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Teigland
     
  • Move definitions of core device-mapper functions for manipulating mapped
    devices and their tables to advertising their
    availability for use elsewhere in the kernel.

    Protect the contents of device-mapper.h with ifdef __KERNEL__. And throw
    in a few formatting clean-ups and extra comments.

    Signed-off-by: Alasdair G Kergon
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alasdair G Kergon
     

28 Mar, 2006

1 commit


02 Feb, 2006

1 commit


17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds