mirror of https://gitee.com/openkylin/linux.git
xfs: remove nonblocking mode from xfs_vm_writepage
Remove the nonblocking optimisation done for mapping lookups during writeback. It's not clear that leaving a hole in the writeback range just because we couldn't get a lock is really a win, as it makes us do another small random IO later on rather than a large sequential IO now. As this gets in the way of sane error handling later on, just remove for the moment and we can re-introduce an equivalent optimisation in future if we see problems due to extent map lock contention. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
36f90b0a2d
commit
988ef92792
|
@ -283,8 +283,7 @@ xfs_map_blocks(
|
||||||
struct inode *inode,
|
struct inode *inode,
|
||||||
loff_t offset,
|
loff_t offset,
|
||||||
struct xfs_bmbt_irec *imap,
|
struct xfs_bmbt_irec *imap,
|
||||||
int type,
|
int type)
|
||||||
int nonblocking)
|
|
||||||
{
|
{
|
||||||
struct xfs_inode *ip = XFS_I(inode);
|
struct xfs_inode *ip = XFS_I(inode);
|
||||||
struct xfs_mount *mp = ip->i_mount;
|
struct xfs_mount *mp = ip->i_mount;
|
||||||
|
@ -300,12 +299,7 @@ xfs_map_blocks(
|
||||||
if (type == XFS_IO_UNWRITTEN)
|
if (type == XFS_IO_UNWRITTEN)
|
||||||
bmapi_flags |= XFS_BMAPI_IGSTATE;
|
bmapi_flags |= XFS_BMAPI_IGSTATE;
|
||||||
|
|
||||||
if (!xfs_ilock_nowait(ip, XFS_ILOCK_SHARED)) {
|
xfs_ilock(ip, XFS_ILOCK_SHARED);
|
||||||
if (nonblocking)
|
|
||||||
return -EAGAIN;
|
|
||||||
xfs_ilock(ip, XFS_ILOCK_SHARED);
|
|
||||||
}
|
|
||||||
|
|
||||||
ASSERT(ip->i_d.di_format != XFS_DINODE_FMT_BTREE ||
|
ASSERT(ip->i_d.di_format != XFS_DINODE_FMT_BTREE ||
|
||||||
(ip->i_df.if_flags & XFS_IFEXTENTS));
|
(ip->i_df.if_flags & XFS_IFEXTENTS));
|
||||||
ASSERT(offset <= mp->m_super->s_maxbytes);
|
ASSERT(offset <= mp->m_super->s_maxbytes);
|
||||||
|
@ -955,7 +949,6 @@ xfs_vm_writepage(
|
||||||
ssize_t len;
|
ssize_t len;
|
||||||
int err, imap_valid = 0, uptodate = 1;
|
int err, imap_valid = 0, uptodate = 1;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
int nonblocking = 0;
|
|
||||||
|
|
||||||
trace_xfs_writepage(inode, page, 0, 0);
|
trace_xfs_writepage(inode, page, 0, 0);
|
||||||
|
|
||||||
|
@ -1055,9 +1048,6 @@ xfs_vm_writepage(
|
||||||
offset = page_offset(page);
|
offset = page_offset(page);
|
||||||
type = XFS_IO_OVERWRITE;
|
type = XFS_IO_OVERWRITE;
|
||||||
|
|
||||||
if (wbc->sync_mode == WB_SYNC_NONE)
|
|
||||||
nonblocking = 1;
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
int new_ioend = 0;
|
int new_ioend = 0;
|
||||||
|
|
||||||
|
@ -1117,8 +1107,7 @@ xfs_vm_writepage(
|
||||||
* time.
|
* time.
|
||||||
*/
|
*/
|
||||||
new_ioend = 1;
|
new_ioend = 1;
|
||||||
err = xfs_map_blocks(inode, offset, &imap, type,
|
err = xfs_map_blocks(inode, offset, &imap, type);
|
||||||
nonblocking);
|
|
||||||
if (err)
|
if (err)
|
||||||
goto error;
|
goto error;
|
||||||
imap_valid = xfs_imap_valid(inode, &imap, offset);
|
imap_valid = xfs_imap_valid(inode, &imap, offset);
|
||||||
|
@ -1188,9 +1177,6 @@ xfs_vm_writepage(
|
||||||
if (iohead)
|
if (iohead)
|
||||||
xfs_cancel_ioend(iohead);
|
xfs_cancel_ioend(iohead);
|
||||||
|
|
||||||
if (err == -EAGAIN)
|
|
||||||
goto redirty;
|
|
||||||
|
|
||||||
xfs_aops_discard_page(page);
|
xfs_aops_discard_page(page);
|
||||||
ClearPageUptodate(page);
|
ClearPageUptodate(page);
|
||||||
unlock_page(page);
|
unlock_page(page);
|
||||||
|
|
Loading…
Reference in New Issue