backport rwsem from Linux 3.11