Commit 57ea4b89 authored by Mark Tinguely's avatar Mark Tinguely Committed by Andrew Morton
Browse files

ocfs2: convert ocfs2_inode_lock_with_page() to ocfs2_inode_lock_with_folio()

Saves a hidden call to compound_head().

Link: https://lkml.kernel.org/r/20241205171653.3179945-9-willy@infradead.org


Signed-off-by: default avatarMark Tinguely <mark.tinguely@oracle.com>
Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
Cc: Changwei Ge <gechangwei@live.cn>
Cc: Joel Becker <jlbec@evilplan.org>
Cc: Jun Piao <piaojun@huawei.com>
Cc: Junxiao Bi <junxiao.bi@oracle.com>
Cc: Mark Fasheh <mark@fasheh.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 7654ed88
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -283,7 +283,7 @@ static int ocfs2_read_folio(struct file *file, struct folio *folio)

	trace_ocfs2_readpage((unsigned long long)oi->ip_blkno, folio->index);

	ret = ocfs2_inode_lock_with_page(inode, NULL, 0, &folio->page);
	ret = ocfs2_inode_lock_with_folio(inode, NULL, 0, folio);
	if (ret != 0) {
		if (ret == AOP_TRUNCATED_PAGE)
			unlock = 0;
+8 −10
Original line number Diff line number Diff line
@@ -2529,30 +2529,28 @@ int ocfs2_inode_lock_full_nested(struct inode *inode,

/*
 * This is working around a lock inversion between tasks acquiring DLM
 * locks while holding a page lock and the downconvert thread which
 * blocks dlm lock acquiry while acquiring page locks.
 * locks while holding a folio lock and the downconvert thread which
 * blocks dlm lock acquiry while acquiring folio locks.
 *
 * ** These _with_page variants are only intended to be called from aop
 * methods that hold page locks and return a very specific *positive* error
 * ** These _with_folio variants are only intended to be called from aop
 * methods that hold folio locks and return a very specific *positive* error
 * code that aop methods pass up to the VFS -- test for errors with != 0. **
 *
 * The DLM is called such that it returns -EAGAIN if it would have
 * blocked waiting for the downconvert thread.  In that case we unlock
 * our page so the downconvert thread can make progress.  Once we've
 * our folio so the downconvert thread can make progress.  Once we've
 * done this we have to return AOP_TRUNCATED_PAGE so the aop method
 * that called us can bubble that back up into the VFS who will then
 * immediately retry the aop call.
 */
int ocfs2_inode_lock_with_page(struct inode *inode,
			      struct buffer_head **ret_bh,
			      int ex,
			      struct page *page)
int ocfs2_inode_lock_with_folio(struct inode *inode,
		struct buffer_head **ret_bh, int ex, struct folio *folio)
{
	int ret;

	ret = ocfs2_inode_lock_full(inode, ret_bh, ex, OCFS2_LOCK_NONBLOCK);
	if (ret == -EAGAIN) {
		unlock_page(page);
		folio_unlock(folio);
		/*
		 * If we can't get inode lock immediately, we should not return
		 * directly here, since this will lead to a softlockup problem.
+2 −4
Original line number Diff line number Diff line
@@ -137,10 +137,8 @@ int ocfs2_inode_lock_full_nested(struct inode *inode,
			 int ex,
			 int arg_flags,
			 int subclass);
int ocfs2_inode_lock_with_page(struct inode *inode,
			      struct buffer_head **ret_bh,
			      int ex,
			      struct page *page);
int ocfs2_inode_lock_with_folio(struct inode *inode,
		struct buffer_head **ret_bh, int ex, struct folio *folio);
/* Variants without special locking class or flags */
#define ocfs2_inode_lock_full(i, r, e, f)\
		ocfs2_inode_lock_full_nested(i, r, e, f, OI_LS_NORMAL)