The situation is slightly more complex than this : the object has been created, yes but may not exist as it could have been concurrently deleted by another user. This is why the true is needed. That creates what looks like an infinite recursion, but it is not really one, as you would need a perfectly evil and perfectly timed user that always drops the objects as soon as we create them. So it actually prevents the open for write to return ENOENT, which would not make much sense.