struct Scsi_Host *shost = hisi_hba->shost;
        int rc;
 
-       if (hisi_sas_debugfs_enable && hisi_hba->debugfs_itct &&
-           !hisi_hba->debugfs_dump_dentry)
+       if (hisi_sas_debugfs_enable && hisi_hba->debugfs_itct)
                queue_work(hisi_hba->wq, &hisi_hba->debugfs_work);
 
        if (!hisi_hba->hw->soft_reset)
 
        /* Create dump dir inside device dir */
        dump_dentry = debugfs_create_dir("dump", hisi_hba->debugfs_dir);
-       if (!dump_dentry)
-               goto fail;
-
        hisi_hba->debugfs_dump_dentry = dump_dentry;
 
-       if (!debugfs_create_file("global", 0400, dump_dentry, hisi_hba,
-                                &hisi_sas_debugfs_global_fops))
-               goto fail;
+       debugfs_create_file("global", 0400, dump_dentry, hisi_hba,
+                           &hisi_sas_debugfs_global_fops);
 
        /* Create port dir and files */
        dentry = debugfs_create_dir("port", dump_dentry);
-       if (!dentry)
-               goto fail;
-
        for (p = 0; p < hisi_hba->n_phy; p++) {
                snprintf(name, 256, "%d", p);
-               if (!debugfs_create_file(name, 0400, dentry,
-                                        &hisi_hba->phy[p],
-                                        &hisi_sas_debugfs_port_fops))
-                       goto fail;
+
+               debugfs_create_file(name, 0400, dentry, &hisi_hba->phy[p],
+                                   &hisi_sas_debugfs_port_fops);
        }
 
        /* Create CQ dir and files */
        dentry = debugfs_create_dir("cq", dump_dentry);
-       if (!dentry)
-               goto fail;
-
        for (c = 0; c < hisi_hba->queue_count; c++) {
                snprintf(name, 256, "%d", c);
 
-               if (!debugfs_create_file(name, 0400, dentry,
-                                        &hisi_hba->cq[c],
-                                        &hisi_sas_debugfs_cq_fops))
-                       goto fail;
+               debugfs_create_file(name, 0400, dentry, &hisi_hba->cq[c],
+                                   &hisi_sas_debugfs_cq_fops);
        }
 
        /* Create DQ dir and files */
        dentry = debugfs_create_dir("dq", dump_dentry);
-       if (!dentry)
-               goto fail;
-
        for (d = 0; d < hisi_hba->queue_count; d++) {
                snprintf(name, 256, "%d", d);
 
-               if (!debugfs_create_file(name, 0400, dentry,
-                                        &hisi_hba->dq[d],
-                                        &hisi_sas_debugfs_dq_fops))
-                       goto fail;
+               debugfs_create_file(name, 0400, dentry, &hisi_hba->dq[d],
+                                   &hisi_sas_debugfs_dq_fops);
        }
 
-       if (!debugfs_create_file("iost", 0400, dump_dentry, hisi_hba,
-                                &hisi_sas_debugfs_iost_fops))
-               goto fail;
+       debugfs_create_file("iost", 0400, dump_dentry, hisi_hba,
+                           &hisi_sas_debugfs_iost_fops);
 
        return;
-fail:
-       debugfs_remove_recursive(hisi_hba->debugfs_dir);
 }
 
 static void hisi_sas_debugfs_snapshot_regs(struct hisi_hba *hisi_hba)
        struct hisi_hba *hisi_hba =
                container_of(work, struct hisi_hba, debugfs_work);
 
+       if (hisi_hba->debugfs_snapshot)
+               return;
+       hisi_hba->debugfs_snapshot = true;
+
        hisi_sas_debugfs_snapshot_regs(hisi_hba);
 }
 EXPORT_SYMBOL_GPL(hisi_sas_debugfs_work_handler);
        hisi_hba->debugfs_dir = debugfs_create_dir(dev_name(dev),
                                                   hisi_sas_debugfs_dir);
 
-       if (!hisi_hba->debugfs_dir)
-               return;
-
        /* Alloc buffer for global */
        sz = hisi_hba->hw->debugfs_reg_global->count * 4;
        hisi_hba->debugfs_global_reg =