lockdep_assert_cpus_held();
        mutex_lock(&wq_pool_mutex);
 
-       /* Save the current isolated cpumask & export it via sysfs */
-       cpumask_copy(wq_isolated_cpumask, exclude_cpumask);
-
        /*
         * If the operation fails, it will fall back to
         * wq_requested_unbound_cpumask which is initially set to
        if (!cpumask_equal(cpumask, wq_unbound_cpumask))
                ret = workqueue_apply_unbound_cpumask(cpumask);
 
+       /* Save the current isolated cpumask & export it via sysfs */
+       if (!ret)
+               cpumask_copy(wq_isolated_cpumask, exclude_cpumask);
+
        mutex_unlock(&wq_pool_mutex);
        free_cpumask_var(cpumask);
        return ret;
        cpumask_and(cpumask, cpumask, cpu_possible_mask);
        if (!cpumask_empty(cpumask)) {
                apply_wqattrs_lock();
-               cpumask_copy(wq_requested_unbound_cpumask, cpumask);
                if (cpumask_equal(cpumask, wq_unbound_cpumask)) {
                        ret = 0;
                        goto out_unlock;
                ret = workqueue_apply_unbound_cpumask(cpumask);
 
 out_unlock:
+               if (!ret)
+                       cpumask_copy(wq_requested_unbound_cpumask, cpumask);
                apply_wqattrs_unlock();
        }