mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
ocfs2: kill EBUSY from dlmfs_evict_inode
When unlinking a dlmfs, first it will invoke dlmfs_unlink(), and then invoke dlmfs_evict_inode(), user_dlm_destroy_lock() is invoked in both places, the second one from dlmfs_evict_inode() will get EBUSY error because USER_LOCK_IN_TEARDOWN is already set in lockres. This doesn't affect any function, just the error log is annoying. Link: https://lkml.kernel.org/r/20220607171226.86672-1-junxiao.bi@oracle.com Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com> Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Gang He <ghe@suse.com> Cc: Jun Piao <piaojun@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
@@ -296,17 +296,25 @@ static void dlmfs_evict_inode(struct inode *inode)
|
|||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
struct dlmfs_inode_private *ip;
|
struct dlmfs_inode_private *ip;
|
||||||
|
struct user_lock_res *lockres;
|
||||||
|
int teardown;
|
||||||
|
|
||||||
clear_inode(inode);
|
clear_inode(inode);
|
||||||
|
|
||||||
mlog(0, "inode %lu\n", inode->i_ino);
|
mlog(0, "inode %lu\n", inode->i_ino);
|
||||||
|
|
||||||
ip = DLMFS_I(inode);
|
ip = DLMFS_I(inode);
|
||||||
|
lockres = &ip->ip_lockres;
|
||||||
|
|
||||||
if (S_ISREG(inode->i_mode)) {
|
if (S_ISREG(inode->i_mode)) {
|
||||||
status = user_dlm_destroy_lock(&ip->ip_lockres);
|
spin_lock(&lockres->l_lock);
|
||||||
if (status < 0)
|
teardown = !!(lockres->l_flags & USER_LOCK_IN_TEARDOWN);
|
||||||
mlog_errno(status);
|
spin_unlock(&lockres->l_lock);
|
||||||
|
if (!teardown) {
|
||||||
|
status = user_dlm_destroy_lock(lockres);
|
||||||
|
if (status < 0)
|
||||||
|
mlog_errno(status);
|
||||||
|
}
|
||||||
iput(ip->ip_parent);
|
iput(ip->ip_parent);
|
||||||
goto clear_fields;
|
goto clear_fields;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user