Commit 8cf9ee50 authored by Miklos Szeredi's avatar Miklos Szeredi
Browse files

Revert "vfs: do get_write_access() on upper layer of overlayfs"



This reverts commit 4d0c5ba2.

We now get write access on both overlay and underlying layers so this patch
is no longer needed for correct operation.

Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
parent 4ab30319
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -1654,8 +1654,7 @@ check_conflicting_open(const struct dentry *dentry, const long arg, int flags)
	if (flags & FL_LAYOUT)
		return 0;

	if ((arg == F_RDLCK) &&
	    (atomic_read(&d_real_inode(dentry)->i_writecount) > 0))
	if ((arg == F_RDLCK) && (atomic_read(&inode->i_writecount) > 0))
		return -EAGAIN;

	if ((arg == F_WRLCK) && ((d_count(dentry) > 1) ||
+2 −13
Original line number Diff line number Diff line
@@ -68,7 +68,6 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
long vfs_truncate(const struct path *path, loff_t length)
{
	struct inode *inode;
	struct dentry *upperdentry;
	long error;

	inode = path->dentry->d_inode;
@@ -91,17 +90,7 @@ long vfs_truncate(const struct path *path, loff_t length)
	if (IS_APPEND(inode))
		goto mnt_drop_write_and_out;

	/*
	 * If this is an overlayfs then do as if opening the file so we get
	 * write access on the upper inode, not on the overlay inode.  For
	 * non-overlay filesystems d_real() is an identity function.
	 */
	upperdentry = d_real(path->dentry, NULL, O_WRONLY);
	error = PTR_ERR(upperdentry);
	if (IS_ERR(upperdentry))
		goto mnt_drop_write_and_out;

	error = get_write_access(upperdentry->d_inode);
	error = get_write_access(inode);
	if (error)
		goto mnt_drop_write_and_out;

@@ -120,7 +109,7 @@ long vfs_truncate(const struct path *path, loff_t length)
		error = do_truncate(path->dentry, length, 0, NULL);

put_write_and_out:
	put_write_access(upperdentry->d_inode);
	put_write_access(inode);
mnt_drop_write_and_out:
	mnt_drop_write(path->mnt);
out: