summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/fs/specfs/spec_vnops.c7
-rw-r--r--sys/gnu/ext2fs/ext2_bmap.c3
-rw-r--r--sys/gnu/fs/ext2fs/ext2_bmap.c3
-rw-r--r--sys/kern/vfs_cluster.c8
-rw-r--r--sys/kern/vfs_export.c2
-rw-r--r--sys/kern/vfs_extattr.c1
-rw-r--r--sys/kern/vfs_subr.c2
-rw-r--r--sys/kern/vfs_syscalls.c1
-rw-r--r--sys/miscfs/specfs/spec_vnops.c7
-rw-r--r--sys/sys/mount.h1
-rw-r--r--sys/sys/vnode.h1
-rw-r--r--sys/ufs/ffs/ffs_vfsops.c4
-rw-r--r--sys/ufs/ufs/ufs_bmap.c3
13 files changed, 16 insertions, 27 deletions
diff --git a/sys/fs/specfs/spec_vnops.c b/sys/fs/specfs/spec_vnops.c
index 237d8f5..f3e264c 100644
--- a/sys/fs/specfs/spec_vnops.c
+++ b/sys/fs/specfs/spec_vnops.c
@@ -251,13 +251,6 @@ spec_open(ap)
if (!dev->si_bsize_phys)
dev->si_bsize_phys = DEV_BSIZE;
}
- maxio = dev->si_iosize_max;
- if (!maxio)
- maxio = DFLTPHYS;
- if (maxio > MAXPHYS)
- maxio = MAXPHYS;
- vp->v_maxio = maxio;
-
return (error);
}
diff --git a/sys/gnu/ext2fs/ext2_bmap.c b/sys/gnu/ext2fs/ext2_bmap.c
index 22f83c3..14ef56e 100644
--- a/sys/gnu/ext2fs/ext2_bmap.c
+++ b/sys/gnu/ext2fs/ext2_bmap.c
@@ -133,8 +133,7 @@ ufs_bmaparray(vp, bn, bnp, ap, nump, runp, runb)
*runb = 0;
}
- vp->v_maxio = devvp->v_maxio;
- maxrun = vp->v_maxio / mp->mnt_stat.f_iosize - 1;
+ maxrun = mp->mnt_iosize_max / mp->mnt_stat.f_iosize - 1;
xap = ap == NULL ? a : ap;
if (!nump)
diff --git a/sys/gnu/fs/ext2fs/ext2_bmap.c b/sys/gnu/fs/ext2fs/ext2_bmap.c
index 22f83c3..14ef56e 100644
--- a/sys/gnu/fs/ext2fs/ext2_bmap.c
+++ b/sys/gnu/fs/ext2fs/ext2_bmap.c
@@ -133,8 +133,7 @@ ufs_bmaparray(vp, bn, bnp, ap, nump, runp, runb)
*runb = 0;
}
- vp->v_maxio = devvp->v_maxio;
- maxrun = vp->v_maxio / mp->mnt_stat.f_iosize - 1;
+ maxrun = mp->mnt_iosize_max / mp->mnt_stat.f_iosize - 1;
xap = ap == NULL ? a : ap;
if (!nump)
diff --git a/sys/kern/vfs_cluster.c b/sys/kern/vfs_cluster.c
index 5037311..d8c77db 100644
--- a/sys/kern/vfs_cluster.c
+++ b/sys/kern/vfs_cluster.c
@@ -106,7 +106,7 @@ cluster_read(vp, filesize, lblkno, size, cred, totread, seqcount, bpp)
* Try to limit the amount of read-ahead by a few
* ad-hoc parameters. This needs work!!!
*/
- racluster = vp->v_maxio/size;
+ racluster = vp->v_mount->mnt_iosize_max / size;
maxra = 2 * racluster + (totread / size);
if (maxra > MAXRA)
maxra = MAXRA;
@@ -363,7 +363,7 @@ cluster_rbuild(vp, filesize, lbn, blkno, size, run, fbp)
for (bn = blkno, i = 0; i < run; ++i, bn += inc) {
if (i != 0) {
if ((bp->b_npages * PAGE_SIZE) +
- round_page(size) > vp->v_maxio)
+ round_page(size) > vp->v_mount->mnt_iosize_max)
break;
if ((tbp = incore(vp, lbn + i)) != NULL) {
@@ -556,7 +556,7 @@ cluster_write(bp, filesize)
if (vp->v_clen == 0 || lbn != vp->v_lastw + 1 ||
(bp->b_blkno != vp->v_lasta + btodb(lblocksize))) {
- maxclen = vp->v_maxio / lblocksize - 1;
+ maxclen = vp->v_mount->mnt_iosize_max / lblocksize - 1;
if (vp->v_clen != 0) {
/*
* Next block is not sequential.
@@ -761,7 +761,7 @@ cluster_wbuild(vp, size, start_lbn, len)
((bp->b_blkno + (dbsize * i)) !=
tbp->b_blkno) ||
((tbp->b_npages + bp->b_npages) >
- (vp->v_maxio / PAGE_SIZE))) {
+ (vp->v_mount->mnt_iosize_max / PAGE_SIZE))) {
BUF_UNLOCK(tbp);
splx(s);
break;
diff --git a/sys/kern/vfs_export.c b/sys/kern/vfs_export.c
index 5b92ad0..4e5f695 100644
--- a/sys/kern/vfs_export.c
+++ b/sys/kern/vfs_export.c
@@ -272,6 +272,7 @@ vfs_rootmountalloc(fstypename, devname, mpp)
mp->mnt_flag = MNT_RDONLY;
mp->mnt_vnodecovered = NULLVP;
vfsp->vfc_refcount++;
+ mp->mnt_iosize_max = DFLTPHYS;
mp->mnt_stat.f_type = vfsp->vfc_typenum;
mp->mnt_flag |= vfsp->vfc_flags & MNT_VISFLAGMASK;
strncpy(mp->mnt_stat.f_fstypename, vfsp->vfc_name, MFSNAMELEN);
@@ -593,7 +594,6 @@ getnewvnode(tag, mp, vops, vpp)
*vpp = vp;
vp->v_usecount = 1;
vp->v_data = 0;
- vp->v_maxio = DFLTPHYS;
splx(s);
vfs_object_create(vp, p, p->p_ucred);
diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c
index 952f875..87c9af8 100644
--- a/sys/kern/vfs_extattr.c
+++ b/sys/kern/vfs_extattr.c
@@ -278,6 +278,7 @@ mount(p, uap)
strncpy(mp->mnt_stat.f_fstypename, vfsp->vfc_name, MFSNAMELEN);
mp->mnt_vnodecovered = vp;
mp->mnt_stat.f_owner = p->p_ucred->cr_uid;
+ mp->mnt_iosize_max = DFLTPHYS;
VOP_UNLOCK(vp, 0, p);
update:
/*
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index 5b92ad0..4e5f695 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -272,6 +272,7 @@ vfs_rootmountalloc(fstypename, devname, mpp)
mp->mnt_flag = MNT_RDONLY;
mp->mnt_vnodecovered = NULLVP;
vfsp->vfc_refcount++;
+ mp->mnt_iosize_max = DFLTPHYS;
mp->mnt_stat.f_type = vfsp->vfc_typenum;
mp->mnt_flag |= vfsp->vfc_flags & MNT_VISFLAGMASK;
strncpy(mp->mnt_stat.f_fstypename, vfsp->vfc_name, MFSNAMELEN);
@@ -593,7 +594,6 @@ getnewvnode(tag, mp, vops, vpp)
*vpp = vp;
vp->v_usecount = 1;
vp->v_data = 0;
- vp->v_maxio = DFLTPHYS;
splx(s);
vfs_object_create(vp, p, p->p_ucred);
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index 952f875..87c9af8 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -278,6 +278,7 @@ mount(p, uap)
strncpy(mp->mnt_stat.f_fstypename, vfsp->vfc_name, MFSNAMELEN);
mp->mnt_vnodecovered = vp;
mp->mnt_stat.f_owner = p->p_ucred->cr_uid;
+ mp->mnt_iosize_max = DFLTPHYS;
VOP_UNLOCK(vp, 0, p);
update:
/*
diff --git a/sys/miscfs/specfs/spec_vnops.c b/sys/miscfs/specfs/spec_vnops.c
index 237d8f5..f3e264c 100644
--- a/sys/miscfs/specfs/spec_vnops.c
+++ b/sys/miscfs/specfs/spec_vnops.c
@@ -251,13 +251,6 @@ spec_open(ap)
if (!dev->si_bsize_phys)
dev->si_bsize_phys = DEV_BSIZE;
}
- maxio = dev->si_iosize_max;
- if (!maxio)
- maxio = DFLTPHYS;
- if (maxio > MAXPHYS)
- maxio = MAXPHYS;
- vp->v_maxio = maxio;
-
return (error);
}
diff --git a/sys/sys/mount.h b/sys/sys/mount.h
index 2da7a1e..1a68b17 100644
--- a/sys/sys/mount.h
+++ b/sys/sys/mount.h
@@ -110,6 +110,7 @@ struct mount {
struct statfs mnt_stat; /* cache of filesystem stats */
qaddr_t mnt_data; /* private data */
time_t mnt_time; /* last time written*/
+ u_int mnt_iosize_max; /* max IO request size */
};
/*
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
index 573a951..047f274 100644
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -111,7 +111,6 @@ struct vnode {
daddr_t v_cstart; /* start block of cluster */
daddr_t v_lasta; /* last allocation */
int v_clen; /* length of current cluster */
- int v_maxio; /* maximum I/O cluster size */
struct vm_object *v_object; /* Place to store VM object */
struct simplelock v_interlock; /* lock on usecount and flag */
struct lock *v_vnlock; /* used for non-locking fs's */
diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c
index 9af1c90..2ec065f 100644
--- a/sys/ufs/ffs/ffs_vfsops.c
+++ b/sys/ufs/ffs/ffs_vfsops.c
@@ -620,6 +620,10 @@ ffs_mountfs(devvp, mp, p, malloctype)
error = VOP_OPEN(devvp, ronly ? FREAD : FREAD|FWRITE, FSCRED, p);
if (error)
return (error);
+ if (devvp->v_rdev->si_iosize_max > mp->mnt_iosize_max)
+ mp->mnt_iosize_max = devvp->v_rdev->si_iosize_max;
+ if (mp->mnt_iosize_max > MAXPHYS)
+ mp->mnt_iosize_max = MAXPHYS;
if (VOP_IOCTL(devvp, DIOCGPART, (caddr_t)&dpart, FREAD, cred, p) != 0)
size = DEV_BSIZE;
diff --git a/sys/ufs/ufs/ufs_bmap.c b/sys/ufs/ufs/ufs_bmap.c
index 22f83c3..14ef56e 100644
--- a/sys/ufs/ufs/ufs_bmap.c
+++ b/sys/ufs/ufs/ufs_bmap.c
@@ -133,8 +133,7 @@ ufs_bmaparray(vp, bn, bnp, ap, nump, runp, runb)
*runb = 0;
}
- vp->v_maxio = devvp->v_maxio;
- maxrun = vp->v_maxio / mp->mnt_stat.f_iosize - 1;
+ maxrun = mp->mnt_iosize_max / mp->mnt_stat.f_iosize - 1;
xap = ap == NULL ? a : ap;
if (!nump)
OpenPOWER on IntegriCloud