Alexei Starovoitov [off-list ref] writes:
On Thu, Oct 21, 2021 at 11:40 AM Toke Høiland-Jørgensen [off-list ref] wrote:
quoted
+ map_type = READ_ONCE(array->aux->type);
+ if (!map_type) {
+ /* There's no owner yet where we could check for compatibility.
+ * Do an atomic swap to prevent racing with another invocation
+ * of this branch (via simultaneous map_update syscalls).
*/
- array->aux->type = fp->type;
- array->aux->jited = fp->jited;
+ if (cmpxchg(&array->aux->type, 0, prog_type))
+ return false;
Other fields might be used in the compatibility check in the future.
This hack is too fragile.
Just use a spin_lock.
Well, yeah, we're adding another field for xdp_mb. I was just going to
eat more bits of the 'type' field, but OK, can switch to a spinlock
instead :)
-Toke