From: Yang Sheng Date: Tue, 13 Oct 2015 07:43:27 +0000 (+0800) Subject: LU-7098 osd-ldiskfs: don't alloc inode directly X-Git-Tag: 2.7.64~21 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=refs%2Fchanges%2F04%2F16804%2F5;p=fs%2Flustre-release.git LU-7098 osd-ldiskfs: don't alloc inode directly We should alloc ldiskfs_inode_info instead alloc inode directly. Else will overflow in follow ldiskfs_add_entry. Signed-off-by: Yang Sheng Change-Id: Ib88f847ea8f160f6f0d0c7e7e680247d7ec96fb6 Reviewed-on: http://review.whamcloud.com/16804 Reviewed-by: Fan Yong Tested-by: Jenkins Reviewed-by: Alex Zhuravlev Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: Frank Zago Reviewed-by: Bob Glossman --- diff --git a/lustre/osd-ldiskfs/osd_compat.c b/lustre/osd-ldiskfs/osd_compat.c index ec004e4..637b1bd 100644 --- a/lustre/osd-ldiskfs/osd_compat.c +++ b/lustre/osd-ldiskfs/osd_compat.c @@ -705,10 +705,11 @@ static int osd_obj_add_entry(struct osd_thread_info *info, inode = info->oti_inode; if (unlikely(inode == NULL)) { - OBD_ALLOC_PTR(inode); - if (inode == NULL) + struct ldiskfs_inode_info *lii; + OBD_ALLOC_PTR(lii); + if (lii == NULL) RETURN(-ENOMEM); - info->oti_inode = inode; + inode = info->oti_inode = &lii->vfs_inode; } inode->i_sb = osd_sb(osd); diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c index 1d6d100..f2850a4 100644 --- a/lustre/osd-ldiskfs/osd_handler.c +++ b/lustre/osd-ldiskfs/osd_handler.c @@ -5804,9 +5804,10 @@ static void osd_key_fini(const struct lu_context *ctx, struct lu_context_key *key, void* data) { struct osd_thread_info *info = data; + struct ldiskfs_inode_info *lli = LDISKFS_I(info->oti_inode); if (info->oti_inode != NULL) - OBD_FREE_PTR(info->oti_inode); + OBD_FREE_PTR(lli); if (info->oti_hlock != NULL) ldiskfs_htree_lock_free(info->oti_hlock); OBD_FREE(info->oti_it_ea_buf, OSD_IT_EA_BUFSIZE);