gfs2 takes the glock before calling into filemap fault, so add the fsnotify hook for ->fault before we take the glock in order to avoid any possible deadlock with the HSM. Signed-off-by: Josef Bacik <josef@xxxxxxxxxxxxxx> --- fs/gfs2/file.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index 08982937b5df..b841b1720b5c 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c @@ -553,9 +553,22 @@ static vm_fault_t gfs2_fault(struct vm_fault *vmf) struct inode *inode = file_inode(vmf->vma->vm_file); struct gfs2_inode *ip = GFS2_I(inode); struct gfs2_holder gh; + struct file *fpin = NULL; vm_fault_t ret; int err; + ret = filemap_maybe_emit_fsnotify_event(vmf, &fpin); + if (unlikely(ret)) { + if (fpin) { + fput(fpin); + ret |= VM_FAULT_RETRY; + } + return ret; + } else if (fpin) { + fput(fpin); + return VM_FAULT_RETRY; + } + gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &gh); err = gfs2_glock_nq(&gh); if (err) { -- 2.43.0