Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e372843a authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Dave Chinner
Browse files

xfs: refactor xfs_setfilesize



Rename the current function to __xfs_setfilesize and add a non-static
wrapper that also takes care of creating the transaction.  This new
helper will be used by the new iomap-based DAX path.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
parent 66642c5c
Loading
Loading
Loading
Loading
+21 −10
Original line number Original line Diff line number Diff line
@@ -200,7 +200,7 @@ xfs_setfilesize_trans_alloc(
 * Update on-disk file size now that data has been written to disk.
 * Update on-disk file size now that data has been written to disk.
 */
 */
STATIC int
STATIC int
xfs_setfilesize(
__xfs_setfilesize(
	struct xfs_inode	*ip,
	struct xfs_inode	*ip,
	struct xfs_trans	*tp,
	struct xfs_trans	*tp,
	xfs_off_t		offset,
	xfs_off_t		offset,
@@ -225,6 +225,23 @@ xfs_setfilesize(
	return xfs_trans_commit(tp);
	return xfs_trans_commit(tp);
}
}


int
xfs_setfilesize(
	struct xfs_inode	*ip,
	xfs_off_t		offset,
	size_t			size)
{
	struct xfs_mount	*mp = ip->i_mount;
	struct xfs_trans	*tp;
	int			error;

	error = xfs_trans_alloc(mp, &M_RES(mp)->tr_fsyncts, 0, 0, 0, &tp);
	if (error)
		return error;

	return __xfs_setfilesize(ip, tp, offset, size);
}

STATIC int
STATIC int
xfs_setfilesize_ioend(
xfs_setfilesize_ioend(
	struct xfs_ioend	*ioend,
	struct xfs_ioend	*ioend,
@@ -247,7 +264,7 @@ xfs_setfilesize_ioend(
		return error;
		return error;
	}
	}


	return xfs_setfilesize(ip, tp, ioend->io_offset, ioend->io_size);
	return __xfs_setfilesize(ip, tp, ioend->io_offset, ioend->io_size);
}
}


/*
/*
@@ -1336,13 +1353,12 @@ xfs_end_io_direct_write(
{
{
	struct inode		*inode = file_inode(iocb->ki_filp);
	struct inode		*inode = file_inode(iocb->ki_filp);
	struct xfs_inode	*ip = XFS_I(inode);
	struct xfs_inode	*ip = XFS_I(inode);
	struct xfs_mount	*mp = ip->i_mount;
	uintptr_t		flags = (uintptr_t)private;
	uintptr_t		flags = (uintptr_t)private;
	int			error = 0;
	int			error = 0;


	trace_xfs_end_io_direct_write(ip, offset, size);
	trace_xfs_end_io_direct_write(ip, offset, size);


	if (XFS_FORCED_SHUTDOWN(mp))
	if (XFS_FORCED_SHUTDOWN(ip->i_mount))
		return -EIO;
		return -EIO;


	if (size <= 0)
	if (size <= 0)
@@ -1380,14 +1396,9 @@ xfs_end_io_direct_write(


		error = xfs_iomap_write_unwritten(ip, offset, size);
		error = xfs_iomap_write_unwritten(ip, offset, size);
	} else if (flags & XFS_DIO_FLAG_APPEND) {
	} else if (flags & XFS_DIO_FLAG_APPEND) {
		struct xfs_trans *tp;

		trace_xfs_end_io_direct_write_append(ip, offset, size);
		trace_xfs_end_io_direct_write_append(ip, offset, size);


		error = xfs_trans_alloc(mp, &M_RES(mp)->tr_fsyncts, 0, 0, 0,
		error = xfs_setfilesize(ip, offset, size);
				&tp);
		if (!error)
			error = xfs_setfilesize(ip, tp, offset, size);
	}
	}


	return error;
	return error;
+1 −0
Original line number Original line Diff line number Diff line
@@ -62,6 +62,7 @@ int xfs_get_blocks_dax_fault(struct inode *inode, sector_t offset,


int	xfs_end_io_direct_write(struct kiocb *iocb, loff_t offset,
int	xfs_end_io_direct_write(struct kiocb *iocb, loff_t offset,
		ssize_t size, void *private);
		ssize_t size, void *private);
int	xfs_setfilesize(struct xfs_inode *ip, xfs_off_t offset, size_t size);


extern void xfs_count_page_state(struct page *, int *, int *);
extern void xfs_count_page_state(struct page *, int *, int *);
extern struct block_device *xfs_find_bdev_for_inode(struct inode *);
extern struct block_device *xfs_find_bdev_for_inode(struct inode *);