Commit 4c0e8dda authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Andreas Gruenbacher
Browse files

gfs2: move setting current->backing_dev_info



Set current->backing_dev_info just around the buffered write calls to
prepare for the next fix.

Fixes: 967bcc91 ("gfs2: iomap direct I/O support")
Cc: stable@vger.kernel.org # v4.19+
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
parent 7582026f
Loading
Loading
Loading
Loading
+10 −11
Original line number Diff line number Diff line
@@ -867,18 +867,15 @@ static ssize_t gfs2_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
	inode_lock(inode);
	ret = generic_write_checks(iocb, from);
	if (ret <= 0)
		goto out;

	/* We can write back this queue in page reclaim */
	current->backing_dev_info = inode_to_bdi(inode);
		goto out_unlock;

	ret = file_remove_privs(file);
	if (ret)
		goto out2;
		goto out_unlock;

	ret = file_update_time(file);
	if (ret)
		goto out2;
		goto out_unlock;

	if (iocb->ki_flags & IOCB_DIRECT) {
		struct address_space *mapping = file->f_mapping;
@@ -887,11 +884,13 @@ static ssize_t gfs2_file_write_iter(struct kiocb *iocb, struct iov_iter *from)

		written = gfs2_file_direct_write(iocb, from);
		if (written < 0 || !iov_iter_count(from))
			goto out2;
			goto out_unlock;

		current->backing_dev_info = inode_to_bdi(inode);
		ret = iomap_file_buffered_write(iocb, from, &gfs2_iomap_ops);
		current->backing_dev_info = NULL;
		if (unlikely(ret < 0))
			goto out2;
			goto out_unlock;
		buffered = ret;

		/*
@@ -915,14 +914,14 @@ static ssize_t gfs2_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
			 */
		}
	} else {
		current->backing_dev_info = inode_to_bdi(inode);
		ret = iomap_file_buffered_write(iocb, from, &gfs2_iomap_ops);
		current->backing_dev_info = NULL;
		if (likely(ret > 0))
			iocb->ki_pos += ret;
	}

out2:
	current->backing_dev_info = NULL;
out:
out_unlock:
	inode_unlock(inode);
	if (likely(ret > 0)) {
		/* Handle various SYNC-type writes */