punchhole: use fd for caching