b=17030
i=johann (original patch from Tianzy)
i=andrew
qctxt_wait_pending_dqacq() must return the same value as schedule_dqacq()
otherwise ost threads can be stuck in got_qunit() for a long time,
causing a watchdog storm during failover.
struct timeval work_end;
long timediff;
struct l_wait_info lwi = { 0 };
+ int rc = 0;
ENTRY;
do_gettimeofday(&work_start);
isblk ? LQUOTA_WAIT_PENDING_BLK_QUOTA :
LQUOTA_WAIT_PENDING_INO_QUOTA,
timediff);
+ /* keep same as schedule_dqacq() b=17030 */
+ spin_lock(&qunit->lq_lock);
+ if (qunit->lq_rc == 0)
+ rc = -EAGAIN;
+ else
+ rc = qunit->lq_rc;
+ spin_unlock(&qunit->lq_lock);
} else {
do_gettimeofday(&work_end);
timediff = cfs_timeval_sub(&work_end, &work_start, NULL);
timediff);
}
- RETURN(0);
+ RETURN(rc);
}
int