FYI, the revoke implementation have since been changed to follow the
badfs-style approach of the forced unmount patches. However, there are
some problems with the forced unmount patches that are now fixed in
the revoke implementation:
- You can't use munmap() to take down shared memory mappings because the
application can accidentally remap something completely different
to that region.
- The ->f_light bits slow down other fget_light() users and there's
a race between
fcheck_files() and set_f_light().
- The operation can live-lock if a malicious process keeps forking. The revoke
implementation solves this by revoking in two passes: (1) take
down the descriptors
and (2) take down the actual inodes.
Pekka