{
        struct ufshpb_req *map_req;
        struct bio *bio;
+       unsigned long flags;
 
        if (hpb->is_hcm &&
            hpb->num_inflight_map_req >= hpb->params.inflight_map_req) {
 
        map_req->rb.srgn_idx = srgn->srgn_idx;
        map_req->rb.mctx = srgn->mctx;
+
+       spin_lock_irqsave(&hpb->param_lock, flags);
        hpb->num_inflight_map_req++;
+       spin_unlock_irqrestore(&hpb->param_lock, flags);
 
        return map_req;
 }
 static void ufshpb_put_map_req(struct ufshpb_lu *hpb,
                               struct ufshpb_req *map_req)
 {
+       unsigned long flags;
+
        bio_put(map_req->bio);
        ufshpb_put_req(hpb, map_req);
+
+       spin_lock_irqsave(&hpb->param_lock, flags);
        hpb->num_inflight_map_req--;
+       spin_unlock_irqrestore(&hpb->param_lock, flags);
 }
 
 static int ufshpb_clear_dirty_bitmap(struct ufshpb_lu *hpb,
 
        spin_lock_init(&hpb->rgn_state_lock);
        spin_lock_init(&hpb->rsp_list_lock);
+       spin_lock_init(&hpb->param_lock);
 
        INIT_LIST_HEAD(&hpb->lru_info.lh_lru_rgn);
        INIT_LIST_HEAD(&hpb->lh_act_srgn);
 
        struct ufshpb_req *pre_req;
        int num_inflight_pre_req;
        int throttle_pre_req;
-       int num_inflight_map_req;
+       int num_inflight_map_req; /* hold param_lock */
+       spinlock_t param_lock;
+
        struct list_head lh_pre_req_free;
        int cur_read_id;
        int pre_req_min_tr_len;