|
@@ -4436,21 +4436,12 @@ flags_complete:
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* Compare and exchange the new flags into place. If we failed, that
|
|
|
- * is if cmpxchg returns anything but the old value, this means that
|
|
|
- * something else has modified the flags variable since we copied it
|
|
|
- * originally. We'll just punt with an error and log something in the
|
|
|
- * message buffer.
|
|
|
- *
|
|
|
- * This is the point of no return for this function. We need to have
|
|
|
- * checked any discrepancies or misconfigurations and returned
|
|
|
- * EOPNOTSUPP before updating pf->flags here.
|
|
|
+ /* Now that we've checked to ensure that the new flags are valid, load
|
|
|
+ * them into place. Since we only modify flags either (a) during
|
|
|
+ * initialization or (b) while holding the RTNL lock, we don't need
|
|
|
+ * anything fancy here.
|
|
|
*/
|
|
|
- if (cmpxchg64(&pf->flags, orig_flags, new_flags) != orig_flags) {
|
|
|
- dev_warn(&pf->pdev->dev,
|
|
|
- "Unable to update pf->flags as it was modified by another thread...\n");
|
|
|
- return -EAGAIN;
|
|
|
- }
|
|
|
+ pf->flags = new_flags;
|
|
|
|
|
|
/* Process any additional changes needed as a result of flag changes.
|
|
|
* The changed_flags value reflects the list of bits that were
|