&req, ll_mdc_blocking_ast, 0);
it->it_flags &= ~O_CHECK_STALE;
if (it->it_op == IT_GETATTR && !first)
- ll_statahead_exit(de, rc);
+ /* If there are too many locks on client-side, then some
+ * locks taken by statahead maybe dropped automatically
+ * before the real "revalidate" using them. */
+ ll_statahead_exit(de, req == NULL ? rc : 0);
else if (first == -EEXIST)
ll_statahead_mark(de);
if (it && it->it_op == IT_GETATTR && rc == 1) {
first = ll_statahead_enter(de->d_parent->d_inode, &de, 0);
if (!first)
- ll_statahead_exit(de, rc);
+ ll_statahead_exit(de, 1);
else if (first == -EEXIST)
ll_statahead_mark(de);
}
for ((i=1, j=0; i<=$NUMFREE; j=$i, i=$((i * MULT)) )); do
createmany -o $DIR/$tdir/$tfile $j $((i - j))
+ swrong=`lctl get_param -n llite.*.statahead_stats | grep "statahead wrong:" | awk '{print $3}'`
lctl get_param -n llite.*.statahead_max | grep '[0-9]'
cancel_lru_locks mdc
cancel_lru_locks osc
delta_sa=$((etime - stime))
log "ls $i files with statahead: $delta_sa sec"
lctl get_param -n llite.*.statahead_stats
+ ewrong=`lctl get_param -n llite.*.statahead_stats | grep "statahead wrong:" | awk '{print $3}'`
max=`lctl get_param -n llite.*.statahead_max | head -n 1`
lctl set_param -n llite.*.statahead_max 0
log "ls $i files without statahead: $delta sec"
lctl set_param llite.*.statahead_max=$max
+ if [ $swrong -lt $ewrong ]; then
+ log "statahead was stopped, maybe too many locks held!"
+ fi
if [ $delta_sa -gt $(($delta + 2)) ]; then
log "ls $i files is slower with statahead!"
error=1