aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ntfs/aops.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ntfs/aops.c')
-rw-r--r--fs/ntfs/aops.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/fs/ntfs/aops.c b/fs/ntfs/aops.c
index 24c46c200337..3f43bfe6184e 100644
--- a/fs/ntfs/aops.c
+++ b/fs/ntfs/aops.c
@@ -264,7 +264,8 @@ lock_retry_remap:
264 goto lock_retry_remap; 264 goto lock_retry_remap;
265 rl = NULL; 265 rl = NULL;
266 lcn = err; 266 lcn = err;
267 } 267 } else if (!rl)
268 up_read(&ni->runlist.lock);
268 /* Hard error, zero out region. */ 269 /* Hard error, zero out region. */
269 bh->b_blocknr = -1; 270 bh->b_blocknr = -1;
270 SetPageError(page); 271 SetPageError(page);
@@ -690,7 +691,8 @@ lock_retry_remap:
690 goto lock_retry_remap; 691 goto lock_retry_remap;
691 rl = NULL; 692 rl = NULL;
692 lcn = err; 693 lcn = err;
693 } 694 } else if (!rl)
695 up_read(&ni->runlist.lock);
694 /* Failed to map the buffer, even after retrying. */ 696 /* Failed to map the buffer, even after retrying. */
695 bh->b_blocknr = -1; 697 bh->b_blocknr = -1;
696 ntfs_error(vol->sb, "Failed to write to inode 0x%lx, " 698 ntfs_error(vol->sb, "Failed to write to inode 0x%lx, "
@@ -965,8 +967,11 @@ lock_retry_remap:
965 if (err2 == -ENOMEM) 967 if (err2 == -ENOMEM)
966 page_is_dirty = TRUE; 968 page_is_dirty = TRUE;
967 lcn = err2; 969 lcn = err2;
968 } else 970 } else {
969 err2 = -EIO; 971 err2 = -EIO;
972 if (!rl)
973 up_read(&ni->runlist.lock);
974 }
970 /* Hard error. Abort writing this record. */ 975 /* Hard error. Abort writing this record. */
971 if (!err || err == -ENOMEM) 976 if (!err || err == -ENOMEM)
972 err = err2; 977 err = err2;
@@ -1660,6 +1665,8 @@ lock_retry_remap:
1660 "not supported yet. " 1665 "not supported yet. "
1661 "Sorry."); 1666 "Sorry.");
1662 err = -EOPNOTSUPP; 1667 err = -EOPNOTSUPP;
1668 if (!rl)
1669 up_read(&ni->runlist.lock);
1663 goto err_out; 1670 goto err_out;
1664 } else if (!is_retry && 1671 } else if (!is_retry &&
1665 lcn == LCN_RL_NOT_MAPPED) { 1672 lcn == LCN_RL_NOT_MAPPED) {
@@ -1674,7 +1681,8 @@ lock_retry_remap:
1674 goto lock_retry_remap; 1681 goto lock_retry_remap;
1675 rl = NULL; 1682 rl = NULL;
1676 lcn = err; 1683 lcn = err;
1677 } 1684 } else if (!rl)
1685 up_read(&ni->runlist.lock);
1678 /* 1686 /*
1679 * Failed to map the buffer, even after 1687 * Failed to map the buffer, even after
1680 * retrying. 1688 * retrying.