Whamcloud - gitweb
LU-8065 utils: clarify lctl help messages
[fs/lustre-release.git] / lustre / ofd / ofd_io.c
index 3352616..3f6ff63 100644 (file)
@@ -23,7 +23,7 @@
  * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2012, 2014 Intel Corporation.
+ * Copyright (c) 2012, 2015, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -172,7 +172,7 @@ static int ofd_inconsistency_verification_main(void *args)
 
        OBD_ALLOC_PTR(lr);
        if (unlikely(lr == NULL))
-               GOTO(out, rc = -ENOMEM);
+               GOTO(out_unlocked, rc = -ENOMEM);
 
        lr->lr_event = LE_PAIRS_VERIFY;
        lr->lr_active = LFSCK_TYPE_LAYOUT;
@@ -223,6 +223,8 @@ static int ofd_inconsistency_verification_main(void *args)
 
        GOTO(out, rc = 0);
 
+out_unlocked:
+       spin_lock(&ofd->ofd_inconsistency_lock);
 out:
        thread_set_flags(thread, SVC_STOPPED);
        wake_up_all(&thread->t_ctl_waitq);
@@ -629,10 +631,6 @@ static int ofd_preprw_write(const struct lu_env *env, struct obd_export *exp,
                        lnb[j+k].lnb_flags = rnb[i].rnb_flags;
                        if (!(rnb[i].rnb_flags & OBD_BRW_GRANTED))
                                lnb[j+k].lnb_rc = -ENOSPC;
-
-                       /* remote client can't break through quota */
-                       if (exp_connect_rmtclient(exp))
-                               lnb[j+k].lnb_flags &= ~OBD_BRW_NOQUOTA;
                }
                j += rc;
                *nr_local += rc;
@@ -652,7 +650,7 @@ err:
        ofd_read_unlock(env, fo);
        ofd_object_put(env, fo);
        /* ofd_grant_prepare_write() was called, so we must commit */
-       ofd_grant_commit(env, exp, rc);
+       ofd_grant_commit(exp, oa->o_grant_used, rc);
 out:
        /* let's still process incoming grant information packed in the oa,
         * but without enforcing grant since we won't proceed with the write.
@@ -709,7 +707,7 @@ int ofd_preprw(const struct lu_env *env, int cmd, struct obd_export *exp,
 
        LASSERT(oa != NULL);
 
-       if (OBD_FAIL_CHECK(OBD_FAIL_OST_ENOENT)) {
+       if (OBD_FAIL_CHECK(OBD_FAIL_SRV_ENOENT)) {
                struct ofd_seq          *oseq;
 
                oseq = ofd_seq_load(env, ofd, ostid_seq(&oa->o_oi));
@@ -997,6 +995,7 @@ static int ofd_soft_sync_cb_add(struct thandle *th, struct obd_export *exp)
  * \param[in] objcount always 1
  * \param[in] niocount number of local buffers
  * \param[in] lnb      local buffers
+ * \param[in] granted  grant space consumed for the bulk I/O
  * \param[in] old_rc   result of processing at this point
  *
  * \retval             0 on successful commit
@@ -1006,9 +1005,9 @@ static int
 ofd_commitrw_write(const struct lu_env *env, struct obd_export *exp,
                   struct ofd_device *ofd, const struct lu_fid *fid,
                   struct lu_attr *la, struct filter_fid *ff, int objcount,
-                  int niocount, struct niobuf_local *lnb, int old_rc)
+                  int niocount, struct niobuf_local *lnb,
+                  unsigned long granted, int old_rc)
 {
-       struct ofd_thread_info  *info = ofd_info(env);
        struct ofd_object       *fo;
        struct dt_object        *o;
        struct thandle          *th;
@@ -1105,6 +1104,11 @@ out_stop:
                cb_registered = true;
        }
 
+       if (rc == 0 && granted > 0) {
+               if (ofd_grant_commit_cb_add(th, exp, granted) == 0)
+                       granted = 0;
+       }
+
        ofd_trans_stop(env, ofd, th, rc);
        if (rc == -ENOSPC && retries++ < 3) {
                CDEBUG(D_INODE, "retry after force commit, retries:%d\n",
@@ -1125,7 +1129,8 @@ out:
        ofd_object_put(env, fo);
        /* second put is pair to object_get in ofd_preprw_write */
        ofd_object_put(env, fo);
-       ofd_grant_commit(env, info->fti_exp, old_rc);
+       if (granted > 0)
+               ofd_grant_commit(exp, granted, old_rc);
        RETURN(rc);
 }
 
@@ -1188,7 +1193,8 @@ int ofd_commitrw(const struct lu_env *env, int cmd, struct obd_export *exp,
                }
 
                rc = ofd_commitrw_write(env, exp, ofd, fid, &info->fti_attr,
-                                       ff, objcount, npages, lnb, old_rc);
+                                       ff, objcount, npages, lnb,
+                                       oa->o_grant_used, old_rc);
                if (rc == 0)
                        obdo_from_la(oa, &info->fti_attr,
                                     OFD_VALID_FLAGS | LA_GID | LA_UID);