/* statfs data are quite recent, don't need to refresh it */
RETURN_EXIT;
- down_write(<d->ltd_qos.lq_rw_sem);
-
- if (obd->obd_osfs_age > max_age)
- goto out;
+ if (test_and_set_bit(LQ_SF_PROGRESS, <d->ltd_qos.lq_flags))
+ RETURN_EXIT;
+ if (obd->obd_osfs_age > max_age) {
+ /* statfs data are quite recent, don't need to refresh it */
+ clear_bit(LQ_SF_PROGRESS, <d->ltd_qos.lq_flags);
+ RETURN_EXIT;
+ }
+ lod_getref(ltd);
ltd_foreach_tgt(ltd, tgt) {
avail = tgt->ltd_statfs.os_bavail;
if (lod_statfs_and_check(env, lod, ltd, tgt, 0))
/* recalculate weigths */
set_bit(LQ_DIRTY, <d->ltd_qos.lq_flags);
}
+ lod_putref(lod, ltd);
obd->obd_osfs_age = ktime_get_seconds();
-out:
- up_write(<d->ltd_qos.lq_rw_sem);
+ clear_bit(LQ_SF_PROGRESS, <d->ltd_qos.lq_flags);
EXIT;
}