Commit 307cdb54 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Darrick J. Wong
Browse files

xfs: don't log the inode in xfs_fs_map_blocks if it



Even if we are asked for a write layout there is no point in logging
the inode unless we actually modified it in some way.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent 88cdb714
Loading
Loading
Loading
Loading
+18 −24
Original line number Diff line number Diff line
@@ -150,30 +150,24 @@ xfs_fs_map_blocks(

	ASSERT(!nimaps || imap.br_startblock != DELAYSTARTBLOCK);

	if (write) {
		enum xfs_prealloc_flags	flags = 0;

		if (!nimaps || imap.br_startblock == HOLESTARTBLOCK) {
	if (write && (!nimaps || imap.br_startblock == HOLESTARTBLOCK)) {
		/*
			 * xfs_iomap_write_direct() expects to take ownership of
			 * the shared ilock.
		 * xfs_iomap_write_direct() expects to take ownership of the
		 * shared ilock.
		 */
		xfs_ilock(ip, XFS_ILOCK_SHARED);
			error = xfs_iomap_write_direct(ip, offset, length,
						       &imap, nimaps);
		error = xfs_iomap_write_direct(ip, offset, length, &imap,
					       nimaps);
		if (error)
			goto out_unlock;

		/*
			 * Ensure the next transaction is committed
			 * synchronously so that the blocks allocated and
			 * handed out to the client are guaranteed to be
			 * present even after a server crash.
		 * Ensure the next transaction is committed synchronously so
		 * that the blocks allocated and handed out to the client are
		 * guaranteed to be present even after a server crash.
		 */
			flags |= XFS_PREALLOC_SET | XFS_PREALLOC_SYNC;
		}

		error = xfs_update_prealloc_flags(ip, flags);
		error = xfs_update_prealloc_flags(ip,
				XFS_PREALLOC_SET | XFS_PREALLOC_SYNC);
		if (error)
			goto out_unlock;
	}