int ret = -EINVAL;
        cpumask_var_t saved_cpumask;
 
-       if (!zalloc_cpumask_var(&saved_cpumask, GFP_KERNEL))
-               return -ENOMEM;
-
        /*
         * Not excluding isolated cpus on purpose.
         * If the user wishes to include them, we allow that.
        cpumask_and(cpumask, cpumask, cpu_possible_mask);
        if (!cpumask_empty(cpumask)) {
                apply_wqattrs_lock();
+               if (cpumask_equal(cpumask, wq_unbound_cpumask)) {
+                       ret = 0;
+                       goto out_unlock;
+               }
+
+               if (!zalloc_cpumask_var(&saved_cpumask, GFP_KERNEL)) {
+                       ret = -ENOMEM;
+                       goto out_unlock;
+               }
 
                /* save the old wq_unbound_cpumask. */
                cpumask_copy(saved_cpumask, wq_unbound_cpumask);
                if (ret < 0)
                        cpumask_copy(wq_unbound_cpumask, saved_cpumask);
 
+               free_cpumask_var(saved_cpumask);
+out_unlock:
                apply_wqattrs_unlock();
        }
 
-       free_cpumask_var(saved_cpumask);
        return ret;
 }