]> git.karo-electronics.de Git - karo-tx-linux.git/commit
vfs: In mntput run deactivate_super on a shallow stack.
authorEric W. Biederman <ebiederm@xmission.com>
Wed, 9 Apr 2014 22:16:50 +0000 (15:16 -0700)
committerEric W. Biederman <ebiederm@xmission.com>
Wed, 16 Apr 2014 00:16:01 +0000 (17:16 -0700)
commit36e5e6d62c03ba3347c651deabce86256f67ae3a
treefd2eca253478e1f84429dab894a6b4976f48b282
parentc31b26c462d6028efc8d079de942ee89cd5f3a48
vfs: In mntput run deactivate_super on a shallow stack.

mntput as part of path_put is called from all over the vfs sometimes
as in the case of symlink chasing from some rather deep call chains.
During lazy filesystem unmount with the right set of races those
innocuous little mntput calls (that take very little stack space) can
call deactivate_super and wind up taking 3k of stack space or more
(David Chinner reports 5k for xfs).

Avoid deactivate_super being called from a deep stack by moving
the cleanup of the mount into a work queue.

To avoid semantic changes mntput waits for deactivate_super to complete
before returning.

With this change all filesystem unmounting happens with about 7400
bytes free on the stack at the point where deactivate_super is called.
Giving filesystems plenty of room to do I/O and not overflow the
kernel stack during unmounting.

Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
fs/mount.h
fs/namespace.c