01 Nov, 2011

1 commit

  • Allow userspace dm log implementations to register their log device so it
    is no longer missing from the list of device dependencies.

    When device mapper targets use a device they normally call dm_get_device
    which includes it in the device list returned to userspace applications
    such as LVM through the DM_TABLE_DEPS ioctl. Userspace log devices
    don't use dm_get_device as userspace opens them so they are missing from
    the list of dependencies.

    This patch extends the DM_ULOG_CTR operation to allow userspace to
    respond with the name of the log device (if appropriate) to be
    registered via 'dm_get_device'. DM_ULOG_REQUEST_VERSION is incremented.

    This is backwards compatible. If the kernel and userspace log server
    have both been updated, the new information will be passed down to the
    kernel and the device will be registered. If the kernel is new, but
    the log server is old, the log server will not pass down any device
    information and the kernel will simply bypass the device registration
    as before. If the kernel is old but the log server is new, the log
    server will see the old version number and not pass the device info.

    Signed-off-by: Jonathan Brassow
    Signed-off-by: Alasdair G Kergon

    Jonathan E Brassow
     

14 Jan, 2011

1 commit

  • This patch adds a 'version' field to the 'dm_ulog_request'
    structure.

    The 'version' field is taken from a portion of the unused
    'padding' field in the 'dm_ulog_request' structure. This
    was done to avoid changing the size of the structure and
    possibly disrupting backwards compatibility.

    The version number will help notify user-space daemons
    when a change has been made to the kernel/userspace
    log API.

    Signed-off-by: Jonathan Brassow
    Signed-off-by: Mike Snitzer
    Signed-off-by: Alasdair G Kergon

    Jonathan Brassow
     

09 Nov, 2009

1 commit


05 Sep, 2009

1 commit

  • Device-mapper userspace logs (like the clustered log) are
    identified by a universally unique identifier (UUID). This
    identifier is used to associate requests from the kernel to
    a specific log in userspace. The UUID must be unique everywhere,
    since multiple machines may use this identifier when communicating
    about a particular log, as is the case for cluster logs.

    Sometimes, device-mapper/LVM may re-use a UUID. This is the
    case during pvmoves, when moving from one segment of an LV
    to another, or when resizing a mirror, etc. In these cases,
    a new log is created with the same UUID and loaded in the
    "inactive" slot. When a device-mapper "resume" is issued,
    the "live" table is deactivated and the new "inactive" table
    becomes "live". (The "inactive" table can also be removed
    via a device-mapper 'clear' command.)

    The above two issues were colliding. More than one log was being
    created with the same UUID, and there was no way to distinguish
    between them. So, sometimes the wrong log would be swapped
    out during the exchange.

    The solution is to create a locally unique identifier,
    'luid', to go along with the UUID. This new identifier is used
    to determine exactly which log is being referenced by the kernel
    when the log exchange is made. The identifier is not
    universally safe, but it does not need to be, since
    create/destroy/suspend/resume operations are bound to a specific
    machine; and these are the operations that make up the exchange.

    Signed-off-by: Jonathan Brassow
    Signed-off-by: Alasdair G Kergon

    Jonathan Brassow
     

22 Jun, 2009

1 commit

  • This patch contains a device-mapper mirror log module that forwards
    requests to userspace for processing.

    The structures used for communication between kernel and userspace are
    located in include/linux/dm-log-userspace.h. Due to the frequency,
    diversity, and 2-way communication nature of the exchanges between
    kernel and userspace, 'connector' was chosen as the interface for
    communication.

    The first log implementations written in userspace - "clustered-disk"
    and "clustered-core" - support clustered shared storage. A userspace
    daemon (in the LVM2 source code repository) uses openAIS/corosync to
    process requests in an ordered fashion with the rest of the nodes in the
    cluster so as to prevent log state corruption. Other implementations
    with no association to LVM or openAIS/corosync, are certainly possible.

    (Imagine if two machines are writing to the same region of a mirror.
    They would both mark the region dirty, but you need a cluster-aware
    entity that can handle properly marking the region clean when they are
    done. Otherwise, you might clear the region when the first machine is
    done, not the second.)

    Signed-off-by: Jonathan Brassow
    Cc: Evgeniy Polyakov
    Signed-off-by: Alasdair G Kergon

    Jonthan Brassow