diff options
Diffstat (limited to 'fs/xfs/xfs_rename.c')
| -rw-r--r-- | fs/xfs/xfs_rename.c | 12 | 
1 files changed, 12 insertions, 0 deletions
diff --git a/fs/xfs/xfs_rename.c b/fs/xfs/xfs_rename.c index 81a05cfd77d..1f148762eb2 100644 --- a/fs/xfs/xfs_rename.c +++ b/fs/xfs/xfs_rename.c @@ -316,6 +316,18 @@ xfs_rename(  		}  	} +	/* +	 * If we are using project inheritance, we only allow renames +	 * into our tree when the project IDs are the same; else the +	 * tree quota mechanism would be circumvented. +	 */ +	if (unlikely((target_dp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) && +		     (target_dp->i_d.di_projid != src_ip->i_d.di_projid))) { +		error = XFS_ERROR(EXDEV); +		xfs_rename_unlock4(inodes, XFS_ILOCK_SHARED); +		goto rele_return; +	} +  	new_parent = (src_dp != target_dp);  	src_is_directory = ((src_ip->i_d.di_mode & S_IFMT) == S_IFDIR);  |