Whamcloud - gitweb
LU-5778 lod: Fix lod_qos_statfs_update() 17/12617/2
authorAurelien Degremont <aurelien.degremont@cea.fr>
Fri, 7 Nov 2014 13:10:03 +0000 (14:10 +0100)
committerOleg Drokin <oleg.drokin@intel.com>
Tue, 11 Nov 2014 17:24:20 +0000 (17:24 +0000)
When an OST is sick, or unactivate, lod cannot fetch its statfs
information. In lod_qos_statfs_update() this was preventing lod
to get information for other OST because refresh was stopped at
first error.
This patch fixes this behaviour.

Signed-off-by: Aurelien Degremont <aurelien.degremont@cea.fr>
Change-Id: Id0217f228381ef7a41fdbfd99f5499dcc97ace0e
Reviewed-on: http://review.whamcloud.com/12617
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Niu Yawei <yawei.niu@intel.com>
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/lod/lod_qos.c

index 6abaa1a..6be2281 100644 (file)
@@ -190,6 +190,7 @@ static int lod_statfs_and_check(const struct lu_env *env, struct lod_device *d,
 {
        struct lod_tgt_desc *ost;
        int                  rc;
+       ENTRY;
 
        LASSERT(d);
        ost = OST_TGT(d,index);
@@ -253,7 +254,7 @@ static void lod_qos_statfs_update(const struct lu_env *env,
        struct obd_device *obd = lod2obd(lod);
        struct ost_pool   *osts = &(lod->lod_pool_info);
        unsigned int       i;
-       int                idx, rc = 0;
+       int                idx;
        __u64              max_age, avail;
        ENTRY;
 
@@ -265,15 +266,14 @@ static void lod_qos_statfs_update(const struct lu_env *env,
 
        down_write(&lod->lod_qos.lq_rw_sem);
        if (cfs_time_beforeq_64(max_age, obd->obd_osfs_age))
-               GOTO(out, rc = 0);
+               goto out;
 
        for (i = 0; i < osts->op_count; i++) {
                idx = osts->op_array[i];
                avail = OST_TGT(lod,idx)->ltd_statfs.os_bavail;
-               rc = lod_statfs_and_check(env, lod, idx,
-                                         &OST_TGT(lod,idx)->ltd_statfs);
-               if (rc)
-                       break;
+               if (lod_statfs_and_check(env, lod, idx,
+                                        &OST_TGT(lod, idx)->ltd_statfs))
+                       continue;
                if (OST_TGT(lod,idx)->ltd_statfs.os_bavail != avail)
                        /* recalculate weigths */
                        lod->lod_qos.lq_dirty = 1;