Whamcloud - gitweb
LU-4629 ldlm: fix uninitialized variable
[fs/lustre-release.git] / lustre / obdclass / llog.c
index 7ff0dd7..8202b41 100644 (file)
@@ -146,11 +146,11 @@ int llog_cancel_rec(const struct lu_env *env, struct llog_handle *loghandle,
                               loghandle->lgh_id.lgl_ogen, rc);
                        GOTO(out_err, rc);
                }
-               RETURN(1);
+               RETURN(LLOG_DEL_PLAIN);
        }
        spin_unlock(&loghandle->lgh_hdr_lock);
 
-       rc = llog_write(env, loghandle, &llh->llh_hdr, NULL, 0, NULL, 0);
+       rc = llog_write(env, loghandle, &llh->llh_hdr, LLOG_HEADER_IDX);
        if (rc < 0) {
                CERROR("%s: fail to write header for llog #"DOSTID
                       "#%08x: rc = %d\n",
@@ -378,10 +378,9 @@ repeat:
                                if (rc == LLOG_PROC_BREAK) {
                                        GOTO(out, rc);
                                } else if (rc == LLOG_DEL_RECORD) {
-                                       llog_cancel_rec(lpi->lpi_env,
-                                                       loghandle,
-                                                       rec->lrh_index);
-                                        rc = 0;
+                                       rc = llog_cancel_rec(lpi->lpi_env,
+                                                            loghandle,
+                                                            rec->lrh_index);
                                 }
                                 if (rc)
                                         GOTO(out, rc);
@@ -464,17 +463,19 @@ int llog_process_or_fork(const struct lu_env *env,
 
 #ifdef __KERNEL__
        if (fork) {
+               struct task_struct *task;
+
                /* The new thread can't use parent env,
                 * init the new one in llog_process_thread_daemonize. */
                lpi->lpi_env = NULL;
                init_completion(&lpi->lpi_completion);
-               rc = PTR_ERR(kthread_run(llog_process_thread_daemonize, lpi,
-                                            "llog_process_thread"));
-               if (IS_ERR_VALUE(rc)) {
+               task = kthread_run(llog_process_thread_daemonize, lpi,
+                                  "llog_process_thread");
+               if (IS_ERR(task)) {
+                       rc = PTR_ERR(task);
                        CERROR("%s: cannot start thread: rc = %d\n",
                               loghandle->lgh_ctxt->loc_obd->obd_name, rc);
-                       OBD_FREE_PTR(lpi);
-                       RETURN(rc);
+                       GOTO(out_lpi, rc);
                }
                wait_for_completion(&lpi->lpi_completion);
        } else {
@@ -485,16 +486,22 @@ int llog_process_or_fork(const struct lu_env *env,
        lpi->lpi_env = env;
        llog_process_thread(lpi);
 #endif
-        rc = lpi->lpi_rc;
-        OBD_FREE_PTR(lpi);
-        RETURN(rc);
+       rc = lpi->lpi_rc;
+
+#ifdef __KERNEL__
+out_lpi:
+#endif
+       OBD_FREE_PTR(lpi);
+       RETURN(rc);
 }
 EXPORT_SYMBOL(llog_process_or_fork);
 
 int llog_process(const struct lu_env *env, struct llog_handle *loghandle,
                 llog_cb_t cb, void *data, void *catdata)
 {
-       return llog_process_or_fork(env, loghandle, cb, data, catdata, true);
+       int rc;
+       rc = llog_process_or_fork(env, loghandle, cb, data, catdata, true);
+       return rc == LLOG_DEL_PLAIN ? 0 : rc;
 }
 EXPORT_SYMBOL(llog_process);
 
@@ -565,9 +572,8 @@ int llog_reverse_process(const struct lu_env *env,
                                if (rc == LLOG_PROC_BREAK) {
                                        GOTO(out, rc);
                                } else if (rc == LLOG_DEL_RECORD) {
-                                       llog_cancel_rec(env, loghandle,
-                                                       tail->lrt_index);
-                                       rc = 0;
+                                       rc = llog_cancel_rec(env, loghandle,
+                                                            tail->lrt_index);
                                }
                                 if (rc)
                                         GOTO(out, rc);
@@ -697,7 +703,7 @@ EXPORT_SYMBOL(llog_declare_write_rec);
 
 int llog_write_rec(const struct lu_env *env, struct llog_handle *handle,
                   struct llog_rec_hdr *rec, struct llog_cookie *logcookies,
-                  int numcookies, void *buf, int idx, struct thandle *th)
+                  int idx, struct thandle *th)
 {
        struct llog_operations  *lop;
        int                      raised, rc, buflen;
@@ -712,18 +718,13 @@ int llog_write_rec(const struct lu_env *env, struct llog_handle *handle,
        if (lop->lop_write_rec == NULL)
                RETURN(-EOPNOTSUPP);
 
-       if (buf)
-               buflen = rec->lrh_len + sizeof(struct llog_rec_hdr) +
-                        sizeof(struct llog_rec_tail);
-       else
-               buflen = rec->lrh_len;
+       buflen = rec->lrh_len;
        LASSERT(cfs_size_round(buflen) == buflen);
 
        raised = cfs_cap_raised(CFS_CAP_SYS_RESOURCE);
        if (!raised)
                cfs_cap_raise(CFS_CAP_SYS_RESOURCE);
-       rc = lop->lop_write_rec(env, handle, rec, logcookies, numcookies,
-                               buf, idx, th);
+       rc = lop->lop_write_rec(env, handle, rec, logcookies, idx, th);
        if (!raised)
                cfs_cap_lower(CFS_CAP_SYS_RESOURCE);
        RETURN(rc);
@@ -732,7 +733,7 @@ EXPORT_SYMBOL(llog_write_rec);
 
 int llog_add(const struct lu_env *env, struct llog_handle *lgh,
             struct llog_rec_hdr *rec, struct llog_cookie *logcookies,
-            void *buf, struct thandle *th)
+            struct thandle *th)
 {
        int raised, rc;
 
@@ -744,7 +745,7 @@ int llog_add(const struct lu_env *env, struct llog_handle *lgh,
        raised = cfs_cap_raised(CFS_CAP_SYS_RESOURCE);
        if (!raised)
                cfs_cap_raise(CFS_CAP_SYS_RESOURCE);
-       rc = lgh->lgh_logops->lop_add(env, lgh, rec, logcookies, buf, th);
+       rc = lgh->lgh_logops->lop_add(env, lgh, rec, logcookies, th);
        if (!raised)
                cfs_cap_lower(CFS_CAP_SYS_RESOURCE);
        RETURN(rc);
@@ -850,8 +851,7 @@ EXPORT_SYMBOL(llog_erase);
  * Valid only with local llog.
  */
 int llog_write(const struct lu_env *env, struct llog_handle *loghandle,
-              struct llog_rec_hdr *rec, struct llog_cookie *reccookie,
-              int cookiecount, void *buf, int idx)
+              struct llog_rec_hdr *rec, int idx)
 {
        struct dt_device        *dt;
        struct thandle          *th;
@@ -878,8 +878,7 @@ int llog_write(const struct lu_env *env, struct llog_handle *loghandle,
                GOTO(out_trans, rc);
 
        down_write(&loghandle->lgh_lock);
-       rc = llog_write_rec(env, loghandle, rec, reccookie,
-                           cookiecount, buf, idx, th);
+       rc = llog_write_rec(env, loghandle, rec, NULL, idx, th);
        up_write(&loghandle->lgh_lock);
 out_trans:
        dt_trans_stop(env, dt, th);
@@ -943,6 +942,17 @@ out:
 }
 EXPORT_SYMBOL(llog_close);
 
+/**
+ * Helper function to get the llog size in records. It is used by MGS
+ * mostly to check that config llog exists and contains data.
+ *
+ * \param[in] env      execution environment
+ * \param[in] ctxt     llog context
+ * \param[in] name     llog name
+ *
+ * \retval             true if there are records in llog besides a header
+ * \retval             false on error or llog without records
+ */
 int llog_is_empty(const struct lu_env *env, struct llog_ctxt *ctxt,
                  char *name)
 {
@@ -964,7 +974,8 @@ int llog_is_empty(const struct lu_env *env, struct llog_ctxt *ctxt,
 out_close:
        llog_close(env, llh);
 out:
-       /* header is record 1 */
+       /* The header is record 1, the llog is still considered as empty
+        * if there is only header */
        return (rc <= 1);
 }
 EXPORT_SYMBOL(llog_is_empty);
@@ -975,7 +986,7 @@ int llog_copy_handler(const struct lu_env *env, struct llog_handle *llh,
        struct llog_handle      *copy_llh = data;
 
        /* Append all records */
-       return llog_write(env, copy_llh, rec, NULL, 0, NULL, -1);
+       return llog_write(env, copy_llh, rec, LLOG_NEXT_IDX);
 }
 EXPORT_SYMBOL(llog_copy_handler);