* Synchronous I/O uses a stack-allocated iocb.  Thus we can't trust
  * the iocb is still valid here if this is a synchronous request.
  */
-static void nfs_direct_complete(struct nfs_direct_req *dreq, bool write)
+static void nfs_direct_complete(struct nfs_direct_req *dreq)
 {
        struct inode *inode = dreq->inode;
 
-       if (write)
-               nfs_zap_mapping(inode, inode->i_mapping);
-
        inode_dio_end(inode);
 
        if (dreq->iocb) {
        }
 out_put:
        if (put_dreq(dreq))
-               nfs_direct_complete(dreq, false);
+               nfs_direct_complete(dreq);
        hdr->release(hdr);
 }
 
        }
 
        if (put_dreq(dreq))
-               nfs_direct_complete(dreq, false);
+               nfs_direct_complete(dreq);
        return 0;
 }
 
                        nfs_direct_write_reschedule(dreq);
                        break;
                default:
-                       nfs_direct_complete(dreq, true);
+                       nfs_zap_mapping(dreq->inode, dreq->inode->i_mapping);
+                       nfs_direct_complete(dreq);
        }
 }