lkml.org 
[lkml]   [2018]   [Feb]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 044/193] s390/dasd: prevent prefix I/O error
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

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

    From: Stefan Haberland <sth@linux.vnet.ibm.com>


    [ Upstream commit da340f921d3454f1521671c7a5a43ad3331fbe50 ]

    Prevent that a prefix flag is set based on invalid configuration data.
    The validity.verify_base flag should only be set for alias devices.
    Usually the unit address type is either one of base, PAV alias or
    HyperPAV alias. But in cases where the unit address type is not set or
    any other value the validity.verify_base flag might be set as well.
    This would lead to follow on errors.
    Explicitly check for alias devices and set the validity flag only for
    them.

    Signed-off-by: Stefan Haberland <sth@linux.vnet.ibm.com>
    Reviewed-by: Jan Hoeppner <hoeppner@linux.vnet.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/s390/block/dasd_eckd.c | 16 ++++++++++------
    1 file changed, 10 insertions(+), 6 deletions(-)

    --- a/drivers/s390/block/dasd_eckd.c
    +++ b/drivers/s390/block/dasd_eckd.c
    @@ -518,10 +518,12 @@ static int prefix_LRE(struct ccw1 *ccw,
    pfxdata->validity.define_extent = 1;

    /* private uid is kept up to date, conf_data may be outdated */
    - if (startpriv->uid.type != UA_BASE_DEVICE) {
    + if (startpriv->uid.type == UA_BASE_PAV_ALIAS)
    pfxdata->validity.verify_base = 1;
    - if (startpriv->uid.type == UA_HYPER_PAV_ALIAS)
    - pfxdata->validity.hyper_pav = 1;
    +
    + if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) {
    + pfxdata->validity.verify_base = 1;
    + pfxdata->validity.hyper_pav = 1;
    }

    /* define extend data (mostly)*/
    @@ -3002,10 +3004,12 @@ static int prepare_itcw(struct itcw *itc
    pfxdata.validity.define_extent = 1;

    /* private uid is kept up to date, conf_data may be outdated */
    - if (startpriv->uid.type != UA_BASE_DEVICE) {
    + if (startpriv->uid.type == UA_BASE_PAV_ALIAS)
    + pfxdata.validity.verify_base = 1;
    +
    + if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) {
    pfxdata.validity.verify_base = 1;
    - if (startpriv->uid.type == UA_HYPER_PAV_ALIAS)
    - pfxdata.validity.hyper_pav = 1;
    + pfxdata.validity.hyper_pav = 1;
    }

    switch (cmd) {

    \
     
     \ /
      Last update: 2018-02-23 21:37    [W:3.427 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site