I'm surprised I haven't yet seen "What about union directories?" If create(2) is changed then it could succeed even though a file with that name exists in the union. Then the above: if ((fd = create(file, mode, perm)) < 0) { error... } Would need to become: if ((fd = open(file, mode|OTRUNC)) < 0 || (fd = create(file, mode, perm)) < 0 || (fd = open(file, mode|OTRUNC)) < 0 || error... } This is precisely the current create(2) call and the nasty race is clear.
I suspect the discussion predated 9P2000 and the introduction of the OEXCL option.