diff --git a/src/core/iomgr/fd_posix.c b/src/core/iomgr/fd_posix.c
index 6dcf1a3ec00c8b3a52c237b393eebe243ff41d10..379ca66c85cf879a1eca46911731a03fecabd989 100644
--- a/src/core/iomgr/fd_posix.c
+++ b/src/core/iomgr/fd_posix.c
@@ -117,10 +117,7 @@ static void ref_by(grpc_fd *fd, int n) {
 static void unref_by(grpc_fd *fd, int n) {
   gpr_atm old = gpr_atm_full_fetch_add(&fd->refst, -n);
   if (old == n) {
-    close(fd->fd);
-    grpc_iomgr_closure_init(&fd->on_done_iocb, fd->on_done,
-                            fd->on_done_user_data);
-    grpc_iomgr_add_callback(&fd->on_done_iocb);
+    grpc_iomgr_add_callback(&fd->on_done_closure);
     freelist_fd(fd);
     grpc_iomgr_unref();
   } else {
@@ -183,8 +180,8 @@ static void wake_all_watchers_locked(grpc_fd *fd) {
 }
 
 void grpc_fd_orphan(grpc_fd *fd, grpc_iomgr_cb_func on_done, void *user_data) {
-  fd->on_done = on_done ? on_done : do_nothing;
-  fd->on_done_user_data = user_data;
+  grpc_iomgr_closure_init(&fd->on_done_closure, on_done ? on_done : do_nothing,
+                          user_data);
   shutdown(fd->fd, SHUT_RDWR);
   ref_by(fd, 1); /* remove active status, but keep referenced */
   gpr_mu_lock(&fd->watcher_mu);
@@ -303,11 +300,11 @@ void grpc_fd_shutdown(grpc_fd *fd) {
   gpr_mu_lock(&fd->set_state_mu);
   GPR_ASSERT(!gpr_atm_no_barrier_load(&fd->shutdown));
   gpr_atm_rel_store(&fd->shutdown, 1);
-  set_ready_locked(&fd->readst, fd->shutdown_iocbs, &ncb);
-  set_ready_locked(&fd->writest, fd->shutdown_iocbs, &ncb);
+  set_ready_locked(&fd->readst, fd->shutdown_closures, &ncb);
+  set_ready_locked(&fd->writest, fd->shutdown_closures, &ncb);
   gpr_mu_unlock(&fd->set_state_mu);
   GPR_ASSERT(ncb <= 2);
-  process_callbacks(fd->shutdown_iocbs, ncb, 0, 0);
+  process_callbacks(fd->shutdown_closures, ncb, 0, 0);
 }
 
 void grpc_fd_notify_on_read(grpc_fd *fd, grpc_iomgr_closure *closure) {
diff --git a/src/core/iomgr/fd_posix.h b/src/core/iomgr/fd_posix.h
index 2d9c3245e346e0b5d58ed53d35fed2e461800fc6..db9b2a74f62bf5402828763ce26458c77d825b18 100644
--- a/src/core/iomgr/fd_posix.h
+++ b/src/core/iomgr/fd_posix.h
@@ -91,12 +91,10 @@ struct grpc_fd {
   gpr_atm readst;
   gpr_atm writest;
 
-  grpc_iomgr_cb_func on_done;
-  void *on_done_user_data;
   struct grpc_fd *freelist_next;
 
-  grpc_iomgr_closure on_done_iocb;
-  grpc_iomgr_closure shutdown_iocbs[2];
+  grpc_iomgr_closure on_done_closure;
+  grpc_iomgr_closure shutdown_closures[2];
 };
 
 /* Create a wrapped file descriptor.