oldname need not exist or be on the same filesystem.
ENODEV The device prefix of filename did not exist. ENOTDIR A non-final component of linkname was not a directory. ENOENT A non-final component of linkname did not exist. EEXIST linkname already exists. ENOSPC The filesystem that was to hold the link is full. EIO A hard I/O error occurred. EFAULT linkname or oldname was an invalid pointer.