vfs: add whiteout support
Whiteout isn't actually a new file type, but is represented as a char device (Linus's idea) with 0/0 device number. This has several advantages compared to introducing a new whiteout file type: - no userspace API changes (e.g. trivial to make backups of upper layer filesystem, without losing whiteouts) - no fs image format changes (you can boot an old kernel/fsck without whiteout support and things won't break) - implementation is trivial Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
This commit is contained in:
14
fs/namei.c
14
fs/namei.c
@@ -4346,6 +4346,20 @@ SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newna
|
||||
return sys_renameat2(AT_FDCWD, oldname, AT_FDCWD, newname, 0);
|
||||
}
|
||||
|
||||
int vfs_whiteout(struct inode *dir, struct dentry *dentry)
|
||||
{
|
||||
int error = may_create(dir, dentry);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
if (!dir->i_op->mknod)
|
||||
return -EPERM;
|
||||
|
||||
return dir->i_op->mknod(dir, dentry,
|
||||
S_IFCHR | WHITEOUT_MODE, WHITEOUT_DEV);
|
||||
}
|
||||
EXPORT_SYMBOL(vfs_whiteout);
|
||||
|
||||
int readlink_copy(char __user *buffer, int buflen, const char *link)
|
||||
{
|
||||
int len = PTR_ERR(link);
|
||||
|
||||
Reference in New Issue
Block a user