From 0fab7dc89f4756538f8b67e7736abd6f225abae8 Mon Sep 17 00:00:00 2001 From: wang di Date: Mon, 17 Mar 2014 11:23:02 -0700 Subject: [PATCH] LU-4712 llite: lock the inode to be migrated Because the inode and its connected dentries will be cleared out of the cache after migration, the inode needs to be locked during the migration. Signed-off-by: wang di Change-Id: Ibbbb33473de1a67df85ef8930debcf22cd775bcb Reviewed-on: http://review.whamcloud.com/9689 Tested-by: Jenkins Reviewed-by: Lai Siyao Tested-by: Maloo Reviewed-by: Fan Yong Reviewed-by: Oleg Drokin --- lustre/llite/file.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lustre/llite/file.c b/lustre/llite/file.c index 230a41f..0ee0dde 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -3030,11 +3030,14 @@ int ll_migrate(struct inode *parent, struct file *file, int mdtidx, qstr.name = name; qstr.len = namelen; dchild = d_lookup(file->f_dentry, &qstr); - if (dchild != NULL && dchild->d_inode != NULL) { - op_data->op_fid3 = *ll_inode2fid(dchild->d_inode); + if (dchild != NULL) { if (dchild->d_inode != NULL) { child_inode = igrab(dchild->d_inode); - ll_invalidate_aliases(child_inode); + if (child_inode != NULL) { + mutex_lock(&child_inode->i_mutex); + op_data->op_fid3 = *ll_inode2fid(child_inode); + ll_invalidate_aliases(child_inode); + } } dput(dchild); } else { @@ -3075,6 +3078,7 @@ int ll_migrate(struct inode *parent, struct file *file, int mdtidx, out_free: if (child_inode != NULL) { clear_nlink(child_inode); + mutex_unlock(&child_inode->i_mutex); iput(child_inode); } -- 1.8.3.1