Whamcloud - gitweb
LU-7098 osd-ldiskfs: don't alloc inode directly 04/16804/5
authorYang Sheng <yang.sheng@intel.com>
Tue, 13 Oct 2015 07:43:27 +0000 (15:43 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Mon, 30 Nov 2015 17:20:54 +0000 (17:20 +0000)
We should alloc ldiskfs_inode_info instead alloc inode
directly. Else will overflow in follow ldiskfs_add_entry.

Signed-off-by: Yang Sheng <yang.sheng@intel.com>
Change-Id: Ib88f847ea8f160f6f0d0c7e7e680247d7ec96fb6
Reviewed-on: http://review.whamcloud.com/16804
Reviewed-by: Fan Yong <fan.yong@intel.com>
Tested-by: Jenkins
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Frank Zago <fzago@cray.com>
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
lustre/osd-ldiskfs/osd_compat.c
lustre/osd-ldiskfs/osd_handler.c

index ec004e4..637b1bd 100644 (file)
@@ -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);
index 1d6d100..f2850a4 100644 (file)
@@ -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);