return ret;
        }
  
 -      /*
 -       * Open-code file_start_write here to grab freeze protection,
 -       * which will be released by another thread in
 -       * io_complete_rw().  Fool lockdep by telling it the lock got
 -       * released so that it doesn't complain about the held lock when
 -       * we return to userspace.
 -       */
 -      if (req->flags & REQ_F_ISREG) {
 -              sb_start_write(file_inode(req->file)->i_sb);
 -              __sb_writers_release(file_inode(req->file)->i_sb,
 -                                      SB_FREEZE_WRITE);
 -      }
 +      if (req->flags & REQ_F_ISREG)
 +              kiocb_start_write(kiocb);
        kiocb->ki_flags |= IOCB_WRITE;
  
+       /*
+        * For non-polled IO, set IOCB_DIO_CALLER_COMP, stating that our handler
+        * groks deferring the completion to task context. This isn't
+        * necessary and useful for polled IO as that can always complete
+        * directly.
+        */
+       if (!(kiocb->ki_flags & IOCB_HIPRI))
+               kiocb->ki_flags |= IOCB_DIO_CALLER_COMP;
+ 
        if (likely(req->file->f_op->write_iter))
                ret2 = call_write_iter(req->file, kiocb, &s->iter);
        else if (req->file->f_op->write)