Whamcloud - gitweb
LU-3409 llite: silence lockdep warning in ll_md_blocking_ast
[fs/lustre-release.git] / lustre / osd-ldiskfs / osd_io.c
index b094b50..79c4675 100644 (file)
@@ -27,7 +27,7 @@
  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2011, 2012, Intel Corporation.
+ * Copyright (c) 2012, 2013, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
 /* prerequisite for linux/xattr.h */
 #include <linux/fs.h>
 
-/* ext_depth() */
-#include <ldiskfs/ldiskfs.h>
-#include <ldiskfs/ldiskfs_jbd2.h>
-#include <ldiskfs/ldiskfs_extents.h>
-
 /*
  * struct OBD_{ALLOC,FREE}*()
  * OBD_FAIL_CHECK
@@ -62,6 +57,9 @@
 
 #include "osd_internal.h"
 
+/* ext_depth() */
+#include <ldiskfs/ldiskfs_extents.h>
+
 #ifndef HAVE_PAGE_CONSTANT
 #define mapping_cap_page_constant_write(mapping) 0
 #define SetPageConstant(page) do {} while (0)
@@ -174,7 +172,7 @@ void osd_fini_iobuf(struct osd_device *d, struct osd_iobuf *iobuf)
         }
 }
 
-#ifndef __REQ_WRITE /* pre-2.6.35 */
+#ifndef REQ_WRITE /* pre-2.6.35 */
 #define __REQ_WRITE BIO_RW
 #endif
 
@@ -711,10 +709,15 @@ static int osd_declare_write_commit(const struct lu_env *env,
                /* ignore quota for the whole request if any page is from
                 * client cache or written by root.
                 *
+                * XXX once we drop the 1.8 client support, the checking
+                * for whether page is from cache can be simplified as:
+                * !(lnb[i].flags & OBD_BRW_SYNC)
+                *
                 * XXX we could handle this on per-lnb basis as done by
                 * grant. */
                if ((lnb[i].flags & OBD_BRW_NOQUOTA) ||
-                   !(lnb[i].flags & OBD_BRW_SYNC))
+                   (lnb[i].flags & (OBD_BRW_FROM_GRANT | OBD_BRW_SYNC)) ==
+                   OBD_BRW_FROM_GRANT)
                        ignore_quota = true;
        }
 
@@ -849,7 +852,7 @@ static int osd_write_commit(const struct lu_env *env, struct dt_object *dt,
                 if (isize > i_size_read(inode)) {
                         i_size_write(inode, isize);
                         LDISKFS_I(inode)->i_disksize = isize;
-                        inode->i_sb->s_op->dirty_inode(inode);
+                       ll_dirty_inode(inode, I_DIRTY_DATASYNC);
                 }
 
                 rc = osd_do_bio(osd, inode, iobuf);
@@ -1045,17 +1048,7 @@ static ssize_t osd_declare_write(const struct lu_env *env, struct dt_object *dt,
         oh = container_of0(handle, struct osd_thandle, ot_super);
         LASSERT(oh->ot_handle == NULL);
 
-        /* XXX: size == 0 or INT_MAX indicating a catalog header update or
-         *      llog write, see comment in mdd_declare_llog_record().
-         *
-         *      This hack will be removed with llog over OSD landing
-         */
-        if (size == DECLARE_LLOG_REWRITE)
-                credits = 2;
-        else if (size == DECLARE_LLOG_WRITE)
-                credits = 6;
-        else
-                credits = osd_dto_credits_noquota[DTO_WRITE_BLOCK];
+       credits = osd_dto_credits_noquota[DTO_WRITE_BLOCK];
 
        osd_trans_declare_op(env, oh, OSD_OT_WRITE, credits);
 
@@ -1081,7 +1074,7 @@ static int osd_ldiskfs_writelink(struct inode *inode, char *buffer, int buflen)
         memcpy((char *)&LDISKFS_I(inode)->i_data, (char *)buffer, buflen);
         LDISKFS_I(inode)->i_disksize = buflen;
         i_size_write(inode, buflen);
-        inode->i_sb->s_op->dirty_inode(inode);
+       ll_dirty_inode(inode, I_DIRTY_DATASYNC);
 
         return 0;
 }
@@ -1158,8 +1151,8 @@ int osd_ldiskfs_write_record(struct inode *inode, void *buf, int bufsize,
                        dirty_inode = 1;
                }
                spin_unlock(&inode->i_lock);
-                if (dirty_inode)
-                        inode->i_sb->s_op->dirty_inode(inode);
+               if (dirty_inode)
+                       ll_dirty_inode(inode, I_DIRTY_DATASYNC);
         }
 
         if (err == 0)
@@ -1304,6 +1297,7 @@ static int osd_fiemap_get(const struct lu_env *env, struct dt_object *dt,
 
         LASSERT(inode);
         dentry->d_inode = inode;
+       dentry->d_sb = inode->i_sb;
         file->f_dentry = dentry;
         file->f_mapping = inode->i_mapping;
         file->f_op = inode->i_fop;
@@ -1338,8 +1332,8 @@ const struct dt_body_operations osd_body_ops = {
         .dbo_declare_write_commit = osd_declare_write_commit,
         .dbo_write_commit         = osd_write_commit,
         .dbo_read_prep            = osd_read_prep,
-        .do_declare_punch         = osd_declare_punch,
-        .do_punch                 = osd_punch,
+        .dbo_declare_punch         = osd_declare_punch,
+        .dbo_punch                 = osd_punch,
         .dbo_fiemap_get           = osd_fiemap_get,
 };