Whamcloud - gitweb
LU-3373 osd-ldiskfs: struct file add f_inode member 27/7727/4
authoryangsheng <yang.sheng@intel.com>
Sat, 21 Sep 2013 16:52:44 +0000 (00:52 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Thu, 14 Nov 2013 03:07:39 +0000 (03:07 +0000)
struct file has a f_inode member. Need initalize
before use it.

Signed-off-by: yang sheng <yang.sheng@intel.com>
Change-Id: I290aaea09c4ff9be7f9d044bf972eb43510933d2
Reviewed-on: http://review.whamcloud.com/7727
Tested-by: Jenkins
Reviewed-by: James Simmons <uja.ornl@gmail.com>
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/autoconf/lustre-core.m4
lustre/include/linux/lustre_compat25.h
lustre/osd-ldiskfs/osd_handler.c
lustre/osd-ldiskfs/osd_io.c
lustre/osd-ldiskfs/osd_scrub.c

index 7f37312..dbe3f2a 100644 (file)
@@ -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 <linux/fs.h>
+],[
+       ((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
index cd79e6e..0366fff 100644 (file)
@@ -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 */
index 096dac0..9bbb107 100644 (file)
@@ -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);
 }
index cb5a30f..c407fb8 100644 (file)
@@ -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());
index b7b1b2d..5af0a47 100644 (file)
@@ -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);