Loading fs/xfs/linux-2.6/xfs_lrw.c +20 −21 Original line number Diff line number Diff line Loading @@ -249,9 +249,8 @@ xfs_read( if (n < size) size = n; if (XFS_FORCED_SHUTDOWN(mp)) { if (XFS_FORCED_SHUTDOWN(mp)) return -EIO; } if (unlikely(ioflags & IO_ISDIRECT)) mutex_lock(&inode->i_mutex); Loading @@ -267,7 +266,7 @@ xfs_read( dmflags, &locktype); if (ret) { xfs_iunlock(ip, XFS_IOLOCK_SHARED); goto unlock_isem; goto unlock_mutex; } } Loading @@ -281,7 +280,7 @@ xfs_read( xfs_iunlock(ip, XFS_IOLOCK_SHARED); unlock_isem: unlock_mutex: if (unlikely(ioflags & IO_ISDIRECT)) mutex_unlock(&inode->i_mutex); return ret; Loading Loading @@ -573,7 +572,7 @@ xfs_write( vrwlock_t locktype; size_t ocount = 0, count; loff_t pos; int need_isem = 1, need_flush = 0; int need_i_mutex = 1, need_flush = 0; XFS_STATS_INC(xs_write_calls); Loading Loading @@ -622,14 +621,14 @@ xfs_write( return XFS_ERROR(-EINVAL); if (!VN_CACHED(vp) && pos < i_size_read(inode)) need_isem = 0; need_i_mutex = 0; if (VN_CACHED(vp)) need_flush = 1; } relock: if (need_isem) { if (need_i_mutex) { iolock = XFS_IOLOCK_EXCL; locktype = VRWLOCK_WRITE; Loading @@ -651,7 +650,7 @@ xfs_write( S_ISBLK(inode->i_mode)); if (error) { xfs_iunlock(xip, XFS_ILOCK_EXCL|iolock); goto out_unlock_isem; goto out_unlock_mutex; } new_size = pos + count; Loading @@ -663,7 +662,7 @@ xfs_write( loff_t savedsize = pos; int dmflags = FILP_DELAY_FLAG(file); if (need_isem) if (need_i_mutex) dmflags |= DM_FLAGS_IMUX; xfs_iunlock(xip, XFS_ILOCK_EXCL); Loading @@ -672,7 +671,7 @@ xfs_write( dmflags, &locktype); if (error) { xfs_iunlock(xip, iolock); goto out_unlock_isem; goto out_unlock_mutex; } xfs_ilock(xip, XFS_ILOCK_EXCL); eventsent = 1; Loading Loading @@ -710,7 +709,7 @@ xfs_write( isize, pos + count); if (error) { xfs_iunlock(xip, XFS_ILOCK_EXCL|iolock); goto out_unlock_isem; goto out_unlock_mutex; } } xfs_iunlock(xip, XFS_ILOCK_EXCL); Loading @@ -731,7 +730,7 @@ xfs_write( error = -remove_suid(file->f_dentry); if (unlikely(error)) { xfs_iunlock(xip, iolock); goto out_unlock_isem; goto out_unlock_mutex; } } Loading @@ -747,14 +746,14 @@ xfs_write( -1, FI_REMAPF_LOCKED); } if (need_isem) { if (need_i_mutex) { /* demote the lock now the cached pages are gone */ XFS_ILOCK_DEMOTE(mp, io, XFS_IOLOCK_EXCL); mutex_unlock(&inode->i_mutex); iolock = XFS_IOLOCK_SHARED; locktype = VRWLOCK_WRITE_DIRECT; need_isem = 0; need_i_mutex = 0; } xfs_rw_enter_trace(XFS_DIOWR_ENTER, io, (void *)iovp, segs, Loading @@ -772,7 +771,7 @@ xfs_write( pos += ret; count -= ret; need_isem = 1; need_i_mutex = 1; ioflags &= ~IO_ISDIRECT; xfs_iunlock(xip, iolock); goto relock; Loading @@ -794,14 +793,14 @@ xfs_write( !(ioflags & IO_INVIS)) { xfs_rwunlock(bdp, locktype); if (need_isem) if (need_i_mutex) mutex_unlock(&inode->i_mutex); error = XFS_SEND_NAMESP(xip->i_mount, DM_EVENT_NOSPACE, vp, DM_RIGHT_NULL, vp, DM_RIGHT_NULL, NULL, NULL, 0, 0, 0); /* Delay flag intentionally unused */ if (error) goto out_nounlocks; if (need_isem) if (need_i_mutex) mutex_lock(&inode->i_mutex); xfs_rwlock(bdp, locktype); pos = xip->i_d.di_size; Loading Loading @@ -907,7 +906,7 @@ xfs_write( } xfs_rwunlock(bdp, locktype); if (need_isem) if (need_i_mutex) mutex_unlock(&inode->i_mutex); error = sync_page_range(inode, mapping, pos, ret); Loading @@ -918,8 +917,8 @@ xfs_write( out_unlock_internal: xfs_rwunlock(bdp, locktype); out_unlock_isem: if (need_isem) out_unlock_mutex: if (need_i_mutex) mutex_unlock(&inode->i_mutex); out_nounlocks: return -error; Loading Loading
fs/xfs/linux-2.6/xfs_lrw.c +20 −21 Original line number Diff line number Diff line Loading @@ -249,9 +249,8 @@ xfs_read( if (n < size) size = n; if (XFS_FORCED_SHUTDOWN(mp)) { if (XFS_FORCED_SHUTDOWN(mp)) return -EIO; } if (unlikely(ioflags & IO_ISDIRECT)) mutex_lock(&inode->i_mutex); Loading @@ -267,7 +266,7 @@ xfs_read( dmflags, &locktype); if (ret) { xfs_iunlock(ip, XFS_IOLOCK_SHARED); goto unlock_isem; goto unlock_mutex; } } Loading @@ -281,7 +280,7 @@ xfs_read( xfs_iunlock(ip, XFS_IOLOCK_SHARED); unlock_isem: unlock_mutex: if (unlikely(ioflags & IO_ISDIRECT)) mutex_unlock(&inode->i_mutex); return ret; Loading Loading @@ -573,7 +572,7 @@ xfs_write( vrwlock_t locktype; size_t ocount = 0, count; loff_t pos; int need_isem = 1, need_flush = 0; int need_i_mutex = 1, need_flush = 0; XFS_STATS_INC(xs_write_calls); Loading Loading @@ -622,14 +621,14 @@ xfs_write( return XFS_ERROR(-EINVAL); if (!VN_CACHED(vp) && pos < i_size_read(inode)) need_isem = 0; need_i_mutex = 0; if (VN_CACHED(vp)) need_flush = 1; } relock: if (need_isem) { if (need_i_mutex) { iolock = XFS_IOLOCK_EXCL; locktype = VRWLOCK_WRITE; Loading @@ -651,7 +650,7 @@ xfs_write( S_ISBLK(inode->i_mode)); if (error) { xfs_iunlock(xip, XFS_ILOCK_EXCL|iolock); goto out_unlock_isem; goto out_unlock_mutex; } new_size = pos + count; Loading @@ -663,7 +662,7 @@ xfs_write( loff_t savedsize = pos; int dmflags = FILP_DELAY_FLAG(file); if (need_isem) if (need_i_mutex) dmflags |= DM_FLAGS_IMUX; xfs_iunlock(xip, XFS_ILOCK_EXCL); Loading @@ -672,7 +671,7 @@ xfs_write( dmflags, &locktype); if (error) { xfs_iunlock(xip, iolock); goto out_unlock_isem; goto out_unlock_mutex; } xfs_ilock(xip, XFS_ILOCK_EXCL); eventsent = 1; Loading Loading @@ -710,7 +709,7 @@ xfs_write( isize, pos + count); if (error) { xfs_iunlock(xip, XFS_ILOCK_EXCL|iolock); goto out_unlock_isem; goto out_unlock_mutex; } } xfs_iunlock(xip, XFS_ILOCK_EXCL); Loading @@ -731,7 +730,7 @@ xfs_write( error = -remove_suid(file->f_dentry); if (unlikely(error)) { xfs_iunlock(xip, iolock); goto out_unlock_isem; goto out_unlock_mutex; } } Loading @@ -747,14 +746,14 @@ xfs_write( -1, FI_REMAPF_LOCKED); } if (need_isem) { if (need_i_mutex) { /* demote the lock now the cached pages are gone */ XFS_ILOCK_DEMOTE(mp, io, XFS_IOLOCK_EXCL); mutex_unlock(&inode->i_mutex); iolock = XFS_IOLOCK_SHARED; locktype = VRWLOCK_WRITE_DIRECT; need_isem = 0; need_i_mutex = 0; } xfs_rw_enter_trace(XFS_DIOWR_ENTER, io, (void *)iovp, segs, Loading @@ -772,7 +771,7 @@ xfs_write( pos += ret; count -= ret; need_isem = 1; need_i_mutex = 1; ioflags &= ~IO_ISDIRECT; xfs_iunlock(xip, iolock); goto relock; Loading @@ -794,14 +793,14 @@ xfs_write( !(ioflags & IO_INVIS)) { xfs_rwunlock(bdp, locktype); if (need_isem) if (need_i_mutex) mutex_unlock(&inode->i_mutex); error = XFS_SEND_NAMESP(xip->i_mount, DM_EVENT_NOSPACE, vp, DM_RIGHT_NULL, vp, DM_RIGHT_NULL, NULL, NULL, 0, 0, 0); /* Delay flag intentionally unused */ if (error) goto out_nounlocks; if (need_isem) if (need_i_mutex) mutex_lock(&inode->i_mutex); xfs_rwlock(bdp, locktype); pos = xip->i_d.di_size; Loading Loading @@ -907,7 +906,7 @@ xfs_write( } xfs_rwunlock(bdp, locktype); if (need_isem) if (need_i_mutex) mutex_unlock(&inode->i_mutex); error = sync_page_range(inode, mapping, pos, ret); Loading @@ -918,8 +917,8 @@ xfs_write( out_unlock_internal: xfs_rwunlock(bdp, locktype); out_unlock_isem: if (need_isem) out_unlock_mutex: if (need_i_mutex) mutex_unlock(&inode->i_mutex); out_nounlocks: return -error; Loading