lkml.org 
[lkml]   [2010]   [Jan]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[09/39] md: Fix unfortunate interaction with evms
    2.6.31-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: NeilBrown <neilb@suse.de>

    commit cbd1998377504df005302ac90d49db72a48552a6 upstream.

    evms configures md arrays by:
    open device
    send ioctl
    close device

    for each different ioctl needed.
    Since 2.6.29, the device can disappear after the 'close'
    unless a significant configuration has happened to the device.
    The change made by "SET_ARRAY_INFO" can too minor to stop the device
    from disappearing, but important enough that losing the change is bad.

    So: make sure SET_ARRAY_INFO sets mddev->ctime, and keep the device
    active as long as ctime is non-zero (it gets zeroed with lots of other
    things when the array is stopped).

    This is suitable for -stable kernels since 2.6.29.

    Signed-off-by: NeilBrown <neilb@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/md/md.c | 8 +++++++-
    1 file changed, 7 insertions(+), 1 deletion(-)

    --- a/drivers/md/md.c
    +++ b/drivers/md/md.c
    @@ -276,7 +276,9 @@ static void mddev_put(mddev_t *mddev)
    if (!atomic_dec_and_lock(&mddev->active, &all_mddevs_lock))
    return;
    if (!mddev->raid_disks && list_empty(&mddev->disks) &&
    - !mddev->hold_active) {
    + mddev->ctime == 0 && !mddev->hold_active) {
    + /* Array is not configured at all, and not held active,
    + * so destroy it */
    list_del(&mddev->all_mddevs);
    if (mddev->gendisk) {
    /* we did a probe so need to clean up.
    @@ -5040,6 +5042,10 @@ static int set_array_info(mddev_t * mdde
    mddev->minor_version = info->minor_version;
    mddev->patch_version = info->patch_version;
    mddev->persistent = !info->not_persistent;
    + /* ensure mddev_put doesn't delete this now that there
    + * is some minimal configuration.
    + */
    + mddev->ctime = get_seconds();
    return 0;
    }
    mddev->major_version = MD_MAJOR_VERSION;



    \
     
     \ /
      Last update: 2010-01-05 21:17    [W:0.020 / U:3.864 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site