`update_vnode_status` is potentially expensive and looks to be on the hot path (called from do_put).  Maybe do it async (and maybe bound how many times it'll try)?  If it's required we should consider writing an alternate path where we just keep the handle open and avoid expensive `filelib:ensure_dir()` calls every 1000 puts.