diff options
Diffstat (limited to 'fs/xfs')
| -rw-r--r-- | fs/xfs/xfs_filestream.c | 8 | 
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/xfs/xfs_filestream.c b/fs/xfs/xfs_filestream.c index 9b715dce569..9124425b7f2 100644 --- a/fs/xfs/xfs_filestream.c +++ b/fs/xfs/xfs_filestream.c @@ -744,9 +744,15 @@ xfs_filestream_new_ag(  	 * If the file's parent directory is known, take its iolock in exclusive  	 * mode to prevent two sibling files from racing each other to migrate  	 * themselves and their parent to different AGs. +	 * +	 * Note that we lock the parent directory iolock inside the child +	 * iolock here.  That's fine as we never hold both parent and child +	 * iolock in any other place.  This is different from the ilock, +	 * which requires locking of the child after the parent for namespace +	 * operations.  	 */  	if (pip) -		xfs_ilock(pip, XFS_IOLOCK_EXCL); +		xfs_ilock(pip, XFS_IOLOCK_EXCL | XFS_IOLOCK_PARENT);  	/*  	 * A new AG needs to be found for the file.  If the file's parent  |