Whamcloud - gitweb
LU-4388 io: pass fsync() range through RPC/IO stack
[fs/lustre-release.git] / lustre / target / tgt_handler.c
index 0883c4f..4ab8dc2 100644 (file)
@@ -461,7 +461,7 @@ static int tgt_filter_recovery_request(struct ptlrpc_request *req,
        case MDS_SYNC: /* used in unmounting */
        case OBD_PING:
        case MDS_REINT:
-       case UPDATE_OBJ:
+       case OUT_UPDATE:
        case SEQ_QUERY:
        case FLD_QUERY:
        case LDLM_ENQUEUE:
@@ -797,7 +797,7 @@ static int tgt_init_sec_level(struct ptlrpc_request *req)
                        RETURN(-EACCES);
                }
        } else {
-               if (req->rq_auth_uid == INVALID_UID) {
+               if (!uid_valid(make_kuid(&init_user_ns, req->rq_auth_uid))) {
                        CDEBUG(D_SEC, "client %s -> target %s: user is not "
                               "authenticated!\n", client, tgt_name(tgt));
                        RETURN(-EACCES);
@@ -1126,7 +1126,7 @@ TGT_OBD_HDL    (0,        OBD_IDX_READ,           tgt_obd_idx_read)
 EXPORT_SYMBOL(tgt_obd_handlers);
 
 int tgt_sync(const struct lu_env *env, struct lu_target *tgt,
-            struct dt_object *obj)
+            struct dt_object *obj, __u64 start, __u64 end)
 {
        int rc = 0;
 
@@ -1137,7 +1137,7 @@ int tgt_sync(const struct lu_env *env, struct lu_target *tgt,
                rc = dt_sync(env, tgt->lut_bottom);
        } else if (dt_version_get(env, obj) >
                   tgt->lut_obd->obd_last_committed) {
-               rc = dt_object_sync(env, obj);
+               rc = dt_object_sync(env, obj, start, end);
        }
 
        RETURN(rc);
@@ -1167,6 +1167,9 @@ int tgt_blocking_ast(struct ldlm_lock *lock, struct ldlm_lock_desc *desc,
            (tgt->lut_sync_lock_cancel == ALWAYS_SYNC_ON_CANCEL ||
             (tgt->lut_sync_lock_cancel == BLOCKING_SYNC_ON_CANCEL &&
              lock->l_flags & LDLM_FL_CBPENDING))) {
+               __u64 start = 0;
+               __u64 end = OBD_OBJECT_EOF;
+
                rc = lu_env_init(&env, LCT_DT_THREAD);
                if (unlikely(rc != 0))
                        RETURN(rc);
@@ -1180,7 +1183,12 @@ int tgt_blocking_ast(struct ldlm_lock *lock, struct ldlm_lock_desc *desc,
                if (!dt_object_exists(obj))
                        GOTO(err_put, rc = -ENOENT);
 
-               rc = tgt_sync(&env, tgt, obj);
+               if (lock->l_resource->lr_type == LDLM_EXTENT) {
+                       start = lock->l_policy_data.l_extent.start;
+                       end = lock->l_policy_data.l_extent.end;
+               }
+
+               rc = tgt_sync(&env, tgt, obj, start, end);
                if (rc < 0) {
                        CERROR("%s: syncing "DFID" ("LPU64"-"LPU64") on lock "
                               "cancel: rc = %d\n",
@@ -1363,18 +1371,6 @@ TGT_SEC_HDL_VAR(0,       SEC_CTX_FINI,           tgt_sec_ctx_handle),
 };
 EXPORT_SYMBOL(tgt_sec_ctx_handlers);
 
-static int (*tgt_lfsck_start)(const struct lu_env *env,
-                             struct dt_device *key,
-                             struct lfsck_start_param *lsp) = NULL;
-
-void tgt_register_lfsck_start(int (*start)(const struct lu_env *,
-                                          struct dt_device *,
-                                          struct lfsck_start_param *))
-{
-       tgt_lfsck_start = start;
-}
-EXPORT_SYMBOL(tgt_register_lfsck_start);
-
 int (*tgt_lfsck_in_notify)(const struct lu_env *env,
                           struct dt_device *key,
                           struct lfsck_request *lr) = NULL;
@@ -1412,39 +1408,7 @@ static int tgt_handle_lfsck_notify(struct tgt_session_info *tsi)
        if (lr == NULL)
                RETURN(-EPROTO);
 
-       switch (lr->lr_event) {
-       case LE_START: {
-               struct lfsck_start       start;
-               struct lfsck_start_param lsp;
-
-               start.ls_valid = lr->lr_valid;
-               start.ls_speed_limit = lr->lr_speed;
-               start.ls_version = lr->lr_version;
-               start.ls_active = lr->lr_active;
-               start.ls_flags = lr->lr_param;
-               start.ls_async_windows = lr->lr_async_windows;
-
-               lsp.lsp_namespace = tsi->tsi_exp->exp_obd->obd_namespace;
-               lsp.lsp_start = &start;
-               lsp.lsp_index = lr->lr_index;
-               if (lr->lr_flags & LEF_TO_OST)
-                       lsp.lsp_index_valid = 1;
-               else
-                       lsp.lsp_index_valid = 0;
-               rc = tgt_lfsck_start(env, key, &lsp);
-               break;
-       }
-       case LE_STOP:
-       case LE_PHASE1_DONE:
-       case LE_PHASE2_DONE:
-               rc = tgt_lfsck_in_notify(env, key, lr);
-               break;
-       default:
-               CERROR("%s: unsupported lfsck_event: rc = %d\n",
-                      tgt_name(tsi->tsi_tgt), lr->lr_event);
-               rc = -EOPNOTSUPP;
-               break;
-       }
+       rc = tgt_lfsck_in_notify(env, key, lr);
 
        RETURN(rc);
 }