Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-8]: src/sys/dev Pull up following revision(s) (requested by mlels...



details:   https://anonhg.NetBSD.org/src/rev/1a38a8d09aa7
branches:  netbsd-8
changeset: 852044:1a38a8d09aa7
user:      martin <martin%NetBSD.org@localhost>
date:      Sat Oct 13 17:21:51 2018 +0000

description:
Pull up following revision(s) (requested by mlelstv in ticket #1059):

        sys/dev/vnd.c: revision 1.265
        sys/dev/vndvar.h: revision 1.37

getdisksize only operates on device vnodes. Use the ioctl on the underlying
device instead.

diffstat:

 sys/dev/vnd.c    |  25 +++++++++++++++----------
 sys/dev/vndvar.h |   3 ++-
 2 files changed, 17 insertions(+), 11 deletions(-)

diffs (76 lines):

diff -r 77d0f8bbc3e5 -r 1a38a8d09aa7 sys/dev/vnd.c
--- a/sys/dev/vnd.c     Sat Oct 13 17:19:05 2018 +0000
+++ b/sys/dev/vnd.c     Sat Oct 13 17:21:51 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: vnd.c,v 1.259.6.3 2018/10/13 17:19:05 martin Exp $     */
+/*     $NetBSD: vnd.c,v 1.259.6.4 2018/10/13 17:21:51 martin Exp $     */
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2008 The NetBSD Foundation, Inc.
@@ -91,7 +91,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.259.6.3 2018/10/13 17:19:05 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.259.6.4 2018/10/13 17:21:51 martin Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_vnd.h"
@@ -575,20 +575,18 @@
            vnode_has_op(vnd->sc_vp, VOFFSET(vop_strategy));
 }
 
+/* Verify that I/O requests cannot be smaller than the
+ * smallest I/O size supported by the backend.
+ */
 static bool
 vnode_has_large_blocks(struct vnd_softc *vnd)
 {
-       u_int32_t vnd_secsize, mnt_secsize;
-       uint64_t numsec;
-       unsigned secsize;
+       u_int32_t vnd_secsize, iosize;
 
-       if (getdisksize(vnd->sc_vp, &numsec, &secsize))
-               return true;
-
+       iosize = vnd->sc_iosize;
        vnd_secsize = vnd->sc_geom.vng_secsize;
-       mnt_secsize = secsize;
 
-       return vnd_secsize % mnt_secsize != 0;
+       return vnd_secsize % iosize != 0;
 }
 
 /* XXX this function needs a reliable check to detect
@@ -1406,6 +1404,13 @@
                vnd->sc_vp = nd.ni_vp;
                vnd->sc_size = btodb(vattr.va_size);    /* note truncation */
 
+               /* get smallest I/O size for underlying device, fall back to
+                * fundamental I/O size of underlying filesystem
+                */
+               error = bdev_ioctl(vattr.va_fsid, DIOCGSECTORSIZE, &vnd->sc_iosize, FKIOCTL, l);
+               if (error)
+                       vnd->sc_iosize = vnd->sc_vp->v_mount->mnt_stat.f_frsize;
+
                /*
                 * Use pseudo-geometry specified.  If none was provided,
                 * use "standard" Adaptec fictitious geometry.
diff -r 77d0f8bbc3e5 -r 1a38a8d09aa7 sys/dev/vndvar.h
--- a/sys/dev/vndvar.h  Sat Oct 13 17:19:05 2018 +0000
+++ b/sys/dev/vndvar.h  Sat Oct 13 17:21:51 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: vndvar.h,v 1.35 2015/09/06 06:00:59 dholland Exp $     */
+/*     $NetBSD: vndvar.h,v 1.35.10.1 2018/10/13 17:21:51 martin Exp $  */
 
 /*-
  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -111,6 +111,7 @@
        int              sc_flags;      /* flags */
        uint64_t         sc_size;       /* size of vnd */
        struct vnode    *sc_vp;         /* vnode */
+       u_int            sc_iosize;     /* smallest I/O size for backend */
        kauth_cred_t     sc_cred;       /* credentials */
        int              sc_maxactive;  /* max # of active requests */
        struct bufq_state *sc_tab;      /* transfer queue */



Home | Main Index | Thread Index | Old Index