Author: kib
Date: Sun Jan  6 15:07:19 2013
New Revision: 245103
URL: http://svnweb.freebsd.org/changeset/base/245103

Log:
  MFC r244643:
  Do not force a writer to the devfs file to drain the buffer writes.

Modified:
  stable/9/sys/fs/devfs/devfs_vnops.c
  stable/9/sys/kern/sys_generic.c
  stable/9/sys/sys/file.h
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/fs/   (props changed)

Modified: stable/9/sys/fs/devfs/devfs_vnops.c
==============================================================================
--- stable/9/sys/fs/devfs/devfs_vnops.c Sun Jan  6 14:59:59 2013        
(r245102)
+++ stable/9/sys/fs/devfs/devfs_vnops.c Sun Jan  6 15:07:19 2013        
(r245103)
@@ -1049,6 +1049,7 @@ devfs_open(struct vop_open_args *ap)
        int error, ref, vlocked;
        struct cdevsw *dsw;
        struct file *fpop;
+       struct mtx *mtxp;
 
        if (vp->v_type == VBLK)
                return (ENXIO);
@@ -1099,6 +1100,16 @@ devfs_open(struct vop_open_args *ap)
 #endif
        if (fp->f_ops == &badfileops)
                finit(fp, fp->f_flag, DTYPE_VNODE, dev, &devfs_ops_f);
+       mtxp = mtx_pool_find(mtxpool_sleep, fp);
+
+       /*
+        * Hint to the dofilewrite() to not force the buffer draining
+        * on the writer to the file.  Most likely, the write would
+        * not need normal buffers.
+        */
+       mtx_lock(mtxp);
+       fp->f_vnread_flags |= FDEVFS_VNODE;
+       mtx_unlock(mtxp);
        return (error);
 }
 

Modified: stable/9/sys/kern/sys_generic.c
==============================================================================
--- stable/9/sys/kern/sys_generic.c     Sun Jan  6 14:59:59 2013        
(r245102)
+++ stable/9/sys/kern/sys_generic.c     Sun Jan  6 15:07:19 2013        
(r245103)
@@ -536,7 +536,8 @@ dofilewrite(td, fd, fp, auio, offset, fl
                ktruio = cloneuio(auio);
 #endif
        cnt = auio->uio_resid;
-       if (fp->f_type == DTYPE_VNODE)
+       if (fp->f_type == DTYPE_VNODE &&
+           (fp->f_vnread_flags & FDEVFS_VNODE) == 0)
                bwillwrite();
        if ((error = fo_write(fp, auio, td->td_ucred, flags, td))) {
                if (auio->uio_resid != cnt && (error == ERESTART ||

Modified: stable/9/sys/sys/file.h
==============================================================================
--- stable/9/sys/sys/file.h     Sun Jan  6 14:59:59 2013        (r245102)
+++ stable/9/sys/sys/file.h     Sun Jan  6 15:07:19 2013        (r245103)
@@ -178,7 +178,8 @@ struct file {
 #define        f_advice        f_vnun.fvn_advice
 
 #define        FOFFSET_LOCKED       0x1
-#define        FOFFSET_LOCK_WAITING 0x2                 
+#define        FOFFSET_LOCK_WAITING 0x2
+#define        FDEVFS_VNODE         0x4
 
 #endif /* _KERNEL || _WANT_FILE */
 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to