Whamcloud - gitweb
LU-1994 llite: atomic_open support
[fs/lustre-release.git] / lustre / ofd / ofd_fs.c
index 31bca72..ea2fd06 100644 (file)
@@ -68,15 +68,26 @@ int ofd_record_write(const struct lu_env *env, struct ofd_device *ofd,
        RETURN(rc);
 }
 
+int ofd_precreate_batch(struct ofd_device *ofd, int batch)
+{
+       int count;
+
+       spin_lock(&ofd->ofd_objid_lock);
+       count = min(ofd->ofd_precreate_batch, batch);
+       spin_unlock(&ofd->ofd_objid_lock);
+
+       return count;
+}
+
 obd_id ofd_last_id(struct ofd_device *ofd, obd_seq group)
 {
        obd_id id;
 
        LASSERT(group <= ofd->ofd_max_group);
 
-       cfs_spin_lock(&ofd->ofd_objid_lock);
+       spin_lock(&ofd->ofd_objid_lock);
        id = ofd->ofd_last_objids[group];
-       cfs_spin_unlock(&ofd->ofd_objid_lock);
+       spin_unlock(&ofd->ofd_objid_lock);
 
        return id;
 }
@@ -84,10 +95,10 @@ obd_id ofd_last_id(struct ofd_device *ofd, obd_seq group)
 void ofd_last_id_set(struct ofd_device *ofd, obd_id id, obd_seq group)
 {
        LASSERT(group <= ofd->ofd_max_group);
-       cfs_spin_lock(&ofd->ofd_objid_lock);
+       spin_lock(&ofd->ofd_objid_lock);
        if (ofd->ofd_last_objids[group] < id)
                ofd->ofd_last_objids[group] = id;
-       cfs_spin_unlock(&ofd->ofd_objid_lock);
+       spin_unlock(&ofd->ofd_objid_lock);
 }
 
 int ofd_last_id_write(const struct lu_env *env, struct ofd_device *ofd,
@@ -168,7 +179,7 @@ int ofd_group_load(const struct lu_env *env, struct ofd_device *ofd, int group)
                RETURN(PTR_ERR(dob));
 
        ofd->ofd_lastid_obj[group] = dob;
-       cfs_mutex_init(&ofd->ofd_create_locks[group]);
+       mutex_init(&ofd->ofd_create_locks[group]);
 
        rc = dt_attr_get(env, dob, &info->fti_attr, BYPASS_CAPA);
        if (rc)
@@ -214,7 +225,7 @@ int ofd_groups_init(const struct lu_env *env, struct ofd_device *ofd)
 
        ENTRY;
 
-       cfs_spin_lock_init(&ofd->ofd_objid_lock);
+       spin_lock_init(&ofd->ofd_objid_lock);
 
        rc = dt_attr_get(env, ofd->ofd_last_group_file,
                         &info->fti_attr, BYPASS_CAPA);
@@ -255,7 +266,7 @@ int ofd_groups_init(const struct lu_env *env, struct ofd_device *ofd)
                }
        }
 
-       CWARN("%s: %u groups initialized\n",
+       CDEBUG(D_OTHER, "%s: %u groups initialized\n",
              ofd_obd(ofd)->obd_name, ofd->ofd_max_group + 1);
 cleanup:
        RETURN(rc);
@@ -287,7 +298,7 @@ int ofd_clients_data_init(const struct lu_env *env, struct ofd_device *ofd,
                 * fsfilt_read_record(), in case sizeof(*lcd)
                 * isn't the same as fsd->lsd_client_size.  */
                off = lsd->lsd_client_start + cl_idx * lsd->lsd_client_size;
-               rc = lut_client_data_read(env, &ofd->ofd_lut, lcd, &off, cl_idx);
+               rc = tgt_client_data_read(env, &ofd->ofd_lut, lcd, &off, cl_idx);
                if (rc) {
                        CERROR("error reading FILT %s idx %d off %llu: rc %d\n",
                               LAST_RCVD, cl_idx, off, rc);
@@ -324,15 +335,14 @@ int ofd_clients_data_init(const struct lu_env *env, struct ofd_device *ofd,
                fed = &exp->exp_filter_data;
                *fed->fed_ted.ted_lcd = *lcd;
 
-               ofd_export_stats_init(ofd, exp, NULL);
-               rc = lut_client_add(env, exp, cl_idx);
+               rc = tgt_client_add(env, exp, cl_idx);
                LASSERTF(rc == 0, "rc = %d\n", rc); /* can't fail existing */
                /* VBR: set export last committed version */
                exp->exp_last_committed = last_rcvd;
-               cfs_spin_lock(&exp->exp_lock);
+               spin_lock(&exp->exp_lock);
                exp->exp_connecting = 0;
                exp->exp_in_recovery = 0;
-               cfs_spin_unlock(&exp->exp_lock);
+               spin_unlock(&exp->exp_lock);
                obd->obd_max_recoverable_clients++;
                class_export_put(exp);
 
@@ -340,10 +350,10 @@ int ofd_clients_data_init(const struct lu_env *env, struct ofd_device *ofd,
                CDEBUG(D_OTHER, "client at idx %d has last_rcvd = "LPU64"\n",
                       cl_idx, last_rcvd);
 
-               cfs_spin_lock(&ofd->ofd_lut.lut_translock);
+               spin_lock(&ofd->ofd_lut.lut_translock);
                if (last_rcvd > lsd->lsd_last_transno)
                        lsd->lsd_last_transno = last_rcvd;
-               cfs_spin_unlock(&ofd->ofd_lut.lut_translock);
+               spin_unlock(&ofd->ofd_lut.lut_translock);
        }
 
 err_out:
@@ -383,7 +393,7 @@ int ofd_server_data_init(const struct lu_env *env, struct ofd_device *ofd)
                lsd->lsd_subdir_count = FILTER_SUBDIR_COUNT;
                lsd->lsd_feature_incompat = OBD_INCOMPAT_OST;
        } else {
-               rc = lut_server_data_read(env, &ofd->ofd_lut);
+               rc = tgt_server_data_read(env, &ofd->ofd_lut);
                if (rc) {
                        CDEBUG(D_INODE,"OBD ofd: error reading %s: rc %d\n",
                               LAST_RCVD, rc);
@@ -440,12 +450,13 @@ int ofd_server_data_init(const struct lu_env *env, struct ofd_device *ofd)
 
        rc = ofd_clients_data_init(env, ofd, last_rcvd_size);
 
-       cfs_spin_lock(&ofd->ofd_lut.lut_translock);
+       spin_lock(&ofd->ofd_lut.lut_translock);
        obd->obd_last_committed = lsd->lsd_last_transno;
-       cfs_spin_unlock(&ofd->ofd_lut.lut_translock);
+       ofd->ofd_lut.lut_last_transno = lsd->lsd_last_transno;
+       spin_unlock(&ofd->ofd_lut.lut_translock);
 
        /* save it, so mount count and last_transno is current */
-       rc = lut_server_data_update(env, &ofd->ofd_lut, 0);
+       rc = tgt_server_data_update(env, &ofd->ofd_lut, 0);
        if (rc)
                GOTO(err_fsd, rc);
 
@@ -468,6 +479,16 @@ int ofd_fs_setup(const struct lu_env *env, struct ofd_device *ofd,
        if (OBD_FAIL_CHECK(OBD_FAIL_MDS_FS_SETUP))
                RETURN (-ENOENT);
 
+       /* prepare transactions callbacks */
+       ofd->ofd_txn_cb.dtc_txn_start = NULL;
+       ofd->ofd_txn_cb.dtc_txn_stop = ofd_txn_stop_cb;
+       ofd->ofd_txn_cb.dtc_txn_commit = NULL;
+       ofd->ofd_txn_cb.dtc_cookie = ofd;
+       ofd->ofd_txn_cb.dtc_tag = LCT_DT_THREAD;
+       CFS_INIT_LIST_HEAD(&ofd->ofd_txn_cb.dtc_linkage);
+
+       dt_txn_callback_add(ofd->ofd_osd, &ofd->ofd_txn_cb);
+
        rc = ofd_server_data_init(env, ofd);
        if (rc)
                GOTO(out, rc);
@@ -508,6 +529,7 @@ out_lg:
 out_hc:
        lu_object_put(env, &ofd->ofd_health_check_file->do_lu);
 out:
+       dt_txn_callback_del(ofd->ofd_osd, &ofd->ofd_txn_cb);
        return rc;
 }
 
@@ -530,6 +552,9 @@ void ofd_fs_cleanup(const struct lu_env *env, struct ofd_device *ofd)
        if (i)
                CERROR("can't sync: %d\n", i);
 
+       /* Remove transaction callback */
+       dt_txn_callback_del(ofd->ofd_osd, &ofd->ofd_txn_cb);
+
        if (ofd->ofd_last_group_file) {
                lu_object_put(env, &ofd->ofd_last_group_file->do_lu);
                ofd->ofd_last_group_file = NULL;