From 323293bab2c8d65c6f1c0b3c04671ed073719cbe Mon Sep 17 00:00:00 2001 From: Yang Sheng Date: Tue, 13 Oct 2015 15:43:27 +0800 Subject: [PATCH] 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 --- lustre/osd-ldiskfs/osd_compat.c | 7 ++++--- lustre/osd-ldiskfs/osd_handler.c | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) 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); -- 1.8.3.1