css->flags &= ~CSS_VISIBLE;
 
-       list_for_each_entry(cfts, &css->ss->cfts, node)
+       if (!css->ss) {
+               if (cgroup_on_dfl(cgrp))
+                       cfts = cgroup_base_files;
+               else
+                       cfts = cgroup1_base_files;
+
                cgroup_addrm_files(css, cgrp, cfts, false);
+       } else {
+               list_for_each_entry(cfts, &css->ss->cfts, node)
+                       cgroup_addrm_files(css, cgrp, cfts, false);
+       }
 }
 
 /**
                else
                        cfts = cgroup1_base_files;
 
-               return cgroup_addrm_files(&cgrp->self, cgrp, cfts, true);
-       }
-
-       list_for_each_entry(cfts, &css->ss->cfts, node) {
-               ret = cgroup_addrm_files(css, cgrp, cfts, true);
-               if (ret < 0) {
-                       failed_cfts = cfts;
-                       goto err;
+               ret = cgroup_addrm_files(&cgrp->self, cgrp, cfts, true);
+               if (ret < 0)
+                       return ret;
+       } else {
+               list_for_each_entry(cfts, &css->ss->cfts, node) {
+                       ret = cgroup_addrm_files(css, cgrp, cfts, true);
+                       if (ret < 0) {
+                               failed_cfts = cfts;
+                               goto err;
+                       }
                }
        }
 
        for_each_css(css, ssid, cgrp)
                kill_css(css);
 
-       /*
-        * Remove @cgrp directory along with the base files.  @cgrp has an
-        * extra ref on its kn.
-        */
+       /* clear and remove @cgrp dir, @cgrp has an extra ref on its kn */
+       css_clear_dir(&cgrp->self);
        kernfs_remove(cgrp->kn);
 
        if (parent && cgroup_is_threaded(cgrp))