Whamcloud - gitweb
LU-11911 lov: fix lov_iocontrol for inactive OST case 48/34148/2
authorVladimir Saveliev <c17830@cray.com>
Fri, 1 Feb 2019 00:16:29 +0000 (03:16 +0300)
committerOleg Drokin <green@whamcloud.com>
Mon, 18 Feb 2019 06:38:35 +0000 (06:38 +0000)
For inactive OSTs lov->lov_tgts[index]->ltd_exp is
NULL. lov_iocontrol() is to check that before dereferencing to
lov->lov_tgts[index]->ltd_exp->exp_obd.

Signed-off-by: Vladimir Saveliev <c17830@cray.com>
Cray-bug-id: LUS-6937
Test-Parameters: trivial
Change-Id: I4bb332ee2c50b07a1471035556f4d77a3559847f
Reviewed-on: https://review.whamcloud.com/34148
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Alexandr Boyko <c17825@cray.com>
lustre/lov/lov_obd.c

index 2965c1d..fbe7eb6 100644 (file)
@@ -994,15 +994,16 @@ static int lov_iocontrol(unsigned int cmd, struct obd_export *exp, int len,
                if (!lov->lov_tgts[index])
                        /* Try again with the next index */
                        RETURN(-EAGAIN);
-               imp = lov->lov_tgts[index]->ltd_exp->exp_obd->u.cli.cl_import;
-               if (!lov->lov_tgts[index]->ltd_active &&
-                   imp->imp_state != LUSTRE_IMP_IDLE)
-                       RETURN(-ENODATA);
 
                osc_obd = class_exp2obd(lov->lov_tgts[index]->ltd_exp);
                if (!osc_obd)
                        RETURN(-EINVAL);
 
+               imp = osc_obd->u.cli.cl_import;
+               if (!lov->lov_tgts[index]->ltd_active &&
+                   imp->imp_state != LUSTRE_IMP_IDLE)
+                       RETURN(-ENODATA);
+
                /* copy UUID */
                if (copy_to_user(data->ioc_pbuf2, obd2cli_tgt(osc_obd),
                                 min_t(unsigned long, data->ioc_plen2,