mm: shmem: Reschedule by unlocking and relocking RCU because of missing API

The commit introducing the call to cond_resched_rcu() is backported
from a recent kernel version, which has got some very good updates
to the RCU, including a new function cond_resched_rcu which is
doing not-so-complicated rescheduling stuff.
Kernel 3.10 hasn't got any of these and porting would be overkill.

On our current code base, the RCU management is pretty stupid
compared to newer kernels, so it's just ok to reschedule by just
unlocking the RCU and relocking it: this will allow to update its
status and the drivers will be happy.
This commit is contained in:
Angelo G. Del Regno 2017-03-15 00:56:03 +01:00 committed by ripee
parent 53b5eb4796
commit 0d23b97ed7
1 changed files with 4 additions and 2 deletions

View File

@ -1926,7 +1926,8 @@ restart:
}
if (need_resched()) {
cond_resched_rcu();
rcu_read_unlock();
rcu_read_lock();
start = iter.index + 1;
goto restart;
}
@ -1996,7 +1997,8 @@ restart:
spin_unlock_irq(&mapping->tree_lock);
continue_resched:
if (need_resched()) {
cond_resched_rcu();
rcu_read_unlock();
rcu_read_lock();
start = iter.index + 1;
goto restart;
}