]> git.apps.os.sepia.ceph.com Git - ceph.git/commit
mds: process finished contexts in batch
authorYan, Zheng <zheng.z.yan@intel.com>
Thu, 31 Jan 2013 02:07:35 +0000 (10:07 +0800)
committerYan, Zheng <zheng.z.yan@intel.com>
Sun, 31 Mar 2013 08:57:14 +0000 (16:57 +0800)
commit573a4ae1a2a2dff392580d7473d6bcd57f72b525
tree2ecdc72f94dec4527b718e72f9df3c543e3d3fc9
parent5cbaae66484aba703de57a3c85a8a4e76248286b
mds: process finished contexts in batch

If there are several unstable locks in an inode, current Locker::eval(CInode*,)
processes each lock's finished contexts seperately. This may cause very deep
call stack if finished contexts also call Locker::eval() on the same inode.
An extreme example is:

Locker::eval() wakes an open request(). Server::handle_client_open() starts
a log entry, then call Locker::issue_new_caps(). Locker::issue_new_caps()
calls Locker::eval() and wakes another request. The later request also tries
starting a log entry.

Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
Reviewed-by: Greg Farnum <greg@inktank.com>
src/mds/Locker.cc
src/mds/Locker.h