Rename is a complex beast. The following table shows which rename(2) operations should succeed and which should fail. o: success E: error (either unionfs or vfs) X: EXDEV none = file does not exist file = file is a file dir = file is a empty directory child= file is a non-empty directory wh = file is a directory containing only whiteouts; this makes it logically empty none file dir child wh file o o E E E dir o E o E o child X E X E X wh o E o E o Renaming directories: ===================== Whenever a empty (either physically or logically) directory is being renamed, the following sequence of events should take place: 1) Remove whiteouts from both source and destination directory 2) Rename source to destination 3) Make destination opaque to prevent anything under it from showing up