Fail swap conflicts gracefully to read-only