|
@@ -77,48 +77,44 @@ xfs_get_extsz_hint(
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * This is a wrapper routine around the xfs_ilock() routine used to centralize
|
|
|
- * some grungy code. It is used in places that wish to lock the inode solely
|
|
|
- * for reading the extents. The reason these places can't just call
|
|
|
- * xfs_ilock(SHARED) is that the inode lock also guards to bringing in of the
|
|
|
- * extents from disk for a file in b-tree format. If the inode is in b-tree
|
|
|
- * format, then we need to lock the inode exclusively until the extents are read
|
|
|
- * in. Locking it exclusively all the time would limit our parallelism
|
|
|
- * unnecessarily, though. What we do instead is check to see if the extents
|
|
|
- * have been read in yet, and only lock the inode exclusively if they have not.
|
|
|
+ * These two are wrapper routines around the xfs_ilock() routine used to
|
|
|
+ * centralize some grungy code. They are used in places that wish to lock the
|
|
|
+ * inode solely for reading the extents. The reason these places can't just
|
|
|
+ * call xfs_ilock(ip, XFS_ILOCK_SHARED) is that the inode lock also guards to
|
|
|
+ * bringing in of the extents from disk for a file in b-tree format. If the
|
|
|
+ * inode is in b-tree format, then we need to lock the inode exclusively until
|
|
|
+ * the extents are read in. Locking it exclusively all the time would limit
|
|
|
+ * our parallelism unnecessarily, though. What we do instead is check to see
|
|
|
+ * if the extents have been read in yet, and only lock the inode exclusively
|
|
|
+ * if they have not.
|
|
|
*
|
|
|
- * The function returns a value which should be given to the corresponding
|
|
|
- * xfs_iunlock_map_shared(). This value is the mode in which the lock was
|
|
|
- * actually taken.
|
|
|
+ * The functions return a value which should be given to the corresponding
|
|
|
+ * xfs_iunlock() call.
|
|
|
*/
|
|
|
uint
|
|
|
-xfs_ilock_map_shared(
|
|
|
- xfs_inode_t *ip)
|
|
|
+xfs_ilock_data_map_shared(
|
|
|
+ struct xfs_inode *ip)
|
|
|
{
|
|
|
- uint lock_mode;
|
|
|
+ uint lock_mode = XFS_ILOCK_SHARED;
|
|
|
|
|
|
- if ((ip->i_d.di_format == XFS_DINODE_FMT_BTREE) &&
|
|
|
- ((ip->i_df.if_flags & XFS_IFEXTENTS) == 0)) {
|
|
|
+ if (ip->i_d.di_format == XFS_DINODE_FMT_BTREE &&
|
|
|
+ (ip->i_df.if_flags & XFS_IFEXTENTS) == 0)
|
|
|
lock_mode = XFS_ILOCK_EXCL;
|
|
|
- } else {
|
|
|
- lock_mode = XFS_ILOCK_SHARED;
|
|
|
- }
|
|
|
-
|
|
|
xfs_ilock(ip, lock_mode);
|
|
|
-
|
|
|
return lock_mode;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * This is simply the unlock routine to go with xfs_ilock_map_shared().
|
|
|
- * All it does is call xfs_iunlock() with the given lock_mode.
|
|
|
- */
|
|
|
-void
|
|
|
-xfs_iunlock_map_shared(
|
|
|
- xfs_inode_t *ip,
|
|
|
- unsigned int lock_mode)
|
|
|
+uint
|
|
|
+xfs_ilock_attr_map_shared(
|
|
|
+ struct xfs_inode *ip)
|
|
|
{
|
|
|
- xfs_iunlock(ip, lock_mode);
|
|
|
+ uint lock_mode = XFS_ILOCK_SHARED;
|
|
|
+
|
|
|
+ if (ip->i_d.di_aformat == XFS_DINODE_FMT_BTREE &&
|
|
|
+ (ip->i_afp->if_flags & XFS_IFEXTENTS) == 0)
|
|
|
+ lock_mode = XFS_ILOCK_EXCL;
|
|
|
+ xfs_ilock(ip, lock_mode);
|
|
|
+ return lock_mode;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -588,9 +584,9 @@ xfs_lookup(
|
|
|
if (XFS_FORCED_SHUTDOWN(dp->i_mount))
|
|
|
return XFS_ERROR(EIO);
|
|
|
|
|
|
- lock_mode = xfs_ilock_map_shared(dp);
|
|
|
+ lock_mode = xfs_ilock_data_map_shared(dp);
|
|
|
error = xfs_dir_lookup(NULL, dp, name, &inum, ci_name);
|
|
|
- xfs_iunlock_map_shared(dp, lock_mode);
|
|
|
+ xfs_iunlock(dp, lock_mode);
|
|
|
|
|
|
if (error)
|
|
|
goto out;
|