From: yangsheng Date: Sat, 21 Sep 2013 16:52:44 +0000 (+0800) Subject: LU-3373 osd-ldiskfs: struct file add f_inode member X-Git-Tag: 2.5.52~91 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=2d73a08fe96f2b8e996c55fdc3854e332d019db3 LU-3373 osd-ldiskfs: struct file add f_inode member struct file has a f_inode member. Need initalize before use it. Signed-off-by: yang sheng Change-Id: I290aaea09c4ff9be7f9d044bf972eb43510933d2 Reviewed-on: http://review.whamcloud.com/7727 Tested-by: Jenkins Reviewed-by: James Simmons Reviewed-by: Bob Glossman Tested-by: Maloo Reviewed-by: Oleg Drokin --- diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index 7f37312..dbe3f2a 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -1220,6 +1220,24 @@ LB_LINUX_TRY_COMPILE([ ]) # +# 3.8 struct file has new memeber f_inode +# +AC_DEFUN([LC_HAVE_FILE_F_INODE], +[AC_MSG_CHECKING([if struct file has memeber f_inode]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + ((struct file *)0)->f_inode = NULL; +],[ + AC_DEFINE(HAVE_FILE_F_INODE, 1, + [struct file has memeber f_inode]) + AC_MSG_RESULT([yes]) +],[ + AC_MSG_RESULT([no]) +]) +]) + +# # 3.9 uses hlist_for_each_entry with 3 args # b67bfe0d42cac56c512dd5da4b1b347a23f4b70a # @@ -1358,6 +1376,9 @@ AC_DEFUN([LC_PROG_LINUX], # 3.7 LC_HAVE_POSIXACL_USER_NS + # 3.8 + LC_HAVE_FILE_F_INODE + # 3.9 LC_HAVE_HLIST_FOR_EACH_3ARG LC_HAVE_F_PATH_MNT diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h index cd79e6e..0366fff 100644 --- a/lustre/include/linux/lustre_compat25.h +++ b/lustre/include/linux/lustre_compat25.h @@ -393,4 +393,10 @@ static inline struct dentry *d_make_root(struct inode *root) # define ll_dirty_inode(inode, flag) (inode)->i_sb->s_op->dirty_inode((inode)) #endif +#ifdef HAVE_FILE_F_INODE +# define set_file_inode(file, inode) (file)->f_inode = inode +#else +# define set_file_inode(file, inode) +#endif + #endif /* _COMPAT25_H */ diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c index 096dac0..9bbb107 100644 --- a/lustre/osd-ldiskfs/osd_handler.c +++ b/lustre/osd-ldiskfs/osd_handler.c @@ -3030,6 +3030,7 @@ static int osd_object_sync(const struct lu_env *env, struct dt_object *dt) file->f_dentry = dentry; file->f_mapping = inode->i_mapping; file->f_op = inode->i_fop; + set_file_inode(file, inode); #ifndef HAVE_FILE_FSYNC_4ARGS mutex_lock(&inode->i_mutex); #endif @@ -4577,6 +4578,8 @@ static struct dt_it *osd_it_ea_init(const struct lu_env *env, file->f_dentry = obj_dentry; file->f_mapping = obj->oo_inode->i_mapping; file->f_op = obj->oo_inode->i_fop; + set_file_inode(file, obj->oo_inode); + lu_object_get(lo); RETURN((struct dt_it *) it); } diff --git a/lustre/osd-ldiskfs/osd_io.c b/lustre/osd-ldiskfs/osd_io.c index cb5a30f..c407fb8 100644 --- a/lustre/osd-ldiskfs/osd_io.c +++ b/lustre/osd-ldiskfs/osd_io.c @@ -1594,6 +1594,7 @@ static int osd_fiemap_get(const struct lu_env *env, struct dt_object *dt, file->f_dentry = dentry; file->f_mapping = inode->i_mapping; file->f_op = inode->i_fop; + set_file_inode(file, inode); saved_fs = get_fs(); set_fs(get_ds()); diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c index b7b1b2d..5af0a4738 100644 --- a/lustre/osd-ldiskfs/osd_scrub.c +++ b/lustre/osd-ldiskfs/osd_scrub.c @@ -1727,6 +1727,7 @@ osd_ios_general_scan(struct osd_thread_info *info, struct osd_device *dev, filp->f_mapping = inode->i_mapping; filp->f_op = fops; filp->private_data = NULL; + set_file_inode(filp, inode); rc = fops->readdir(filp, &buf, filldir); fops->release(inode, filp);