Browse Source

xfs: always return with the iolock held from xfs_file_aio_write_checks

While xfs_iunlock is fine with 0 lockflags the calling conventions are much
cleaner if xfs_file_aio_write_checks never returns without the iolock held.

Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Ben Myers <bpm@sgi.com>
Christoph Hellwig 13 years ago
parent
commit
5bf1f26227
1 changed files with 4 additions and 3 deletions
  1. 4 3
      fs/xfs/xfs_file.c

+ 4 - 3
fs/xfs/xfs_file.c

@@ -636,7 +636,9 @@ out_lock:
 /*
 /*
  * Common pre-write limit and setup checks.
  * Common pre-write limit and setup checks.
  *
  *
- * Returns with iolock held according to @iolock.
+ * Called with the iolocked held either shared and exclusive according to
+ * @iolock, and returns with it held.  Might upgrade the iolock to exclusive
+ * if called for a direct write beyond i_size.
  */
  */
 STATIC ssize_t
 STATIC ssize_t
 xfs_file_aio_write_checks(
 xfs_file_aio_write_checks(
@@ -653,8 +655,7 @@ xfs_file_aio_write_checks(
 restart:
 restart:
 	error = generic_write_checks(file, pos, count, S_ISBLK(inode->i_mode));
 	error = generic_write_checks(file, pos, count, S_ISBLK(inode->i_mode));
 	if (error) {
 	if (error) {
-		xfs_rw_iunlock(ip, XFS_ILOCK_EXCL | *iolock);
-		*iolock = 0;
+		xfs_rw_iunlock(ip, XFS_ILOCK_EXCL);
 		return error;
 		return error;
 	}
 	}