Whamcloud - gitweb
Merge branch 'master' of git.lustre.org:prime/lustre
[fs/lustre-release.git] / lustre / lclient / lcommon_cl.c
index 21a52e7..6159d3f 100644 (file)
@@ -673,7 +673,8 @@ void ccc_lock_state(const struct lu_env *env,
                         if (lock->cll_descr.cld_start == 0 &&
                             lock->cll_descr.cld_end == CL_PAGE_EOF) {
                                 cl_isize_write_nolock(inode, attr->cat_kms);
-                                CDEBUG(D_INODE, DFID" updating i_size "LPU64"\n",
+                                CDEBUG(D_INODE|D_VFSTRACE,
+                                       DFID" updating i_size "LPU64"\n",
                                        PFID(lu_object_fid(&obj->co_lu)),
                                        (__u64)cl_isize_read(inode));
                         }
@@ -922,6 +923,11 @@ int ccc_prep_size(const struct lu_env *env, struct cl_object *obj,
                                         cl_isize_write_nolock(inode, kms);
                                 else
                                         cl_isize_write(inode, kms);
+                                CDEBUG(D_VFSTRACE,
+                                       DFID" updating i_size "LPU64"\n",
+                                       PFID(lu_object_fid(&obj->co_lu)),
+                                       (__u64)cl_isize_read(inode));
+
                         }
                 }
         }
@@ -995,6 +1001,17 @@ void ccc_req_attr_set(const struct lu_env *env,
         }
         obdo_from_inode(oa, inode, &cl_i2info(inode)->lli_fid,
                         valid_flags & flags);
+#ifdef __KERNEL__
+        /* Bug11742 - set the OBD_FL_MMAP flag for memory mapped files */
+        if (cfs_atomic_read(&(cl_inode2ccc(inode)->cob_mmap_cnt)) != 0) {
+                if (!(oa->o_valid & OBD_MD_FLFLAGS)) {
+                        oa->o_valid |= OBD_MD_FLFLAGS;
+                        oa->o_flags = OBD_FL_MMAP;
+                } else {
+                        oa->o_flags |= OBD_FL_MMAP;
+                }
+        }
+#endif
 }
 
 const struct cl_req_operations ccc_req_ops = {
@@ -1285,26 +1302,22 @@ __u16 ll_dirent_type_get(struct lu_dirent *ent)
 }
 
 /**
- * build inode number from passed @fid */
-ino_t cl_fid_build_ino(const struct lu_fid *fid)
+ * for 32 bit inode numbers directly map seq+oid to 32bit number.
+ */
+__u32 cl_fid_build_ino32(const struct lu_fid *fid)
 {
-        ino_t ino;
-        ENTRY;
-
-        if (fid_is_igif(fid)) {
-                ino = lu_igif_ino(fid);
-                RETURN(ino);
-        }
-
-        /* Very stupid and having many downsides inode allocation algorithm
-         * based on fid. */
-        ino = fid_flatten(fid) & 0xFFFFFFFF;
+        RETURN(fid_flatten32(fid));
+}
 
-        if (unlikely(ino == 0))
-                /* the first result ino is 0xFFC001, so this is rarely used */
-                ino = 0xffbcde;
-        ino = ino | 0x80000000;
-        RETURN(ino);
+/**
+ * build inode number from passed @fid */
+__u64 cl_fid_build_ino(const struct lu_fid *fid)
+{
+#if BITS_PER_LONG == 32
+        RETURN(fid_flatten32(fid));
+#else
+        RETURN(fid_flatten(fid));
+#endif
 }
 
 /**