staging/lustre/llite: force lvb_data update after layout change
When a file is restored the layout lock is first associated with the released layout and after restore it has to be assocaited with the new layout. This patch forces lvb_data update in ll_layout_fetch() even if one is present (case for released->normal state change) Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3299 Lustre-change: http://review.whamcloud.com/6291 Signed-off-by: JC Lafoucriere <jacques-charles.lafoucriere@cea.fr> Reviewed-by: Jinshan Xiong <jinshan.xiong@intel.com> Reviewed-by: Johann Lombardi <johann.lombardi@intel.com> Signed-off-by: Peng Tao <tao.peng@emc.com> Signed-off-by: Andreas Dilger <andreas.dilger@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
56f4c5a8a5
commit
e2335e5d52
1 changed files with 11 additions and 9 deletions
|
@ -2941,7 +2941,11 @@ static int ll_layout_fetch(struct inode *inode, struct ldlm_lock *lock)
|
|||
int rc;
|
||||
ENTRY;
|
||||
|
||||
if (lock->l_lvb_data != NULL)
|
||||
CDEBUG(D_INODE, DFID" LVB_READY=%d l_lvb_data=%p l_lvb_len=%d\n",
|
||||
PFID(ll_inode2fid(inode)), !!(lock->l_flags & LDLM_FL_LVB_READY),
|
||||
lock->l_lvb_data, lock->l_lvb_len);
|
||||
|
||||
if ((lock->l_lvb_data != NULL) && (lock->l_flags & LDLM_FL_LVB_READY))
|
||||
RETURN(0);
|
||||
|
||||
/* if layout lock was granted right away, the layout is returned
|
||||
|
@ -2977,15 +2981,13 @@ static int ll_layout_fetch(struct inode *inode, struct ldlm_lock *lock)
|
|||
|
||||
memcpy(lvbdata, lmm, lmmsize);
|
||||
lock_res_and_lock(lock);
|
||||
if (lock->l_lvb_data == NULL) {
|
||||
if (lock->l_lvb_data != NULL)
|
||||
OBD_FREE_LARGE(lock->l_lvb_data, lock->l_lvb_len);
|
||||
|
||||
lock->l_lvb_data = lvbdata;
|
||||
lock->l_lvb_len = lmmsize;
|
||||
lvbdata = NULL;
|
||||
}
|
||||
unlock_res_and_lock(lock);
|
||||
|
||||
if (lvbdata != NULL)
|
||||
OBD_FREE_LARGE(lvbdata, lmmsize);
|
||||
EXIT;
|
||||
|
||||
out:
|
||||
|
|
Loading…
Reference in a new issue