From owner-freebsd-fs@FreeBSD.ORG Tue Jun 11 06:34:51 2013 Return-Path: Delivered-To: fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 4443FD81 for ; Tue, 11 Jun 2013 06:34:51 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) by mx1.freebsd.org (Postfix) with ESMTP id DBDA61E0E for ; Tue, 11 Jun 2013 06:34:50 +0000 (UTC) Received: from tom.home (kostik@localhost [127.0.0.1]) by kib.kiev.ua (8.14.7/8.14.7) with ESMTP id r5B6Ykds004347; Tue, 11 Jun 2013 09:34:46 +0300 (EEST) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.8.3 kib.kiev.ua r5B6Ykds004347 Received: (from kostik@localhost) by tom.home (8.14.7/8.14.7/Submit) id r5B6Yktc004346; Tue, 11 Jun 2013 09:34:46 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Tue, 11 Jun 2013 09:34:46 +0300 From: Konstantin Belousov To: Bruce Evans Subject: Re: missed clustering for small block sizes in cluster_wbuild() Message-ID: <20130611063446.GJ3047@kib.kiev.ua> References: <20130607044845.O24441@besplex.bde.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="hCS/BWoPfTdmYtZi" Content-Disposition: inline In-Reply-To: <20130607044845.O24441@besplex.bde.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on tom.home Cc: fs@freebsd.org X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Jun 2013 06:34:51 -0000 --hCS/BWoPfTdmYtZi Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Jun 07, 2013 at 05:28:11AM +1000, Bruce Evans wrote: > I think this is best fixed be fixed by removing the check above and > checking here. Then back out of the changes. I don't know this code > well enough to write the backing out easily. Could you test this, please ? diff --git a/sys/kern/vfs_cluster.c b/sys/kern/vfs_cluster.c index b280317..9e1528e 100644 --- a/sys/kern/vfs_cluster.c +++ b/sys/kern/vfs_cluster.c @@ -766,7 +766,7 @@ cluster_wbuild(struct vnode *vp, long size, daddr_t sta= rt_lbn, int len, { struct buf *bp, *tbp; struct bufobj *bo; - int i, j; + int i, j, jj; int totalwritten =3D 0; int dbsize =3D btodb(size); =20 @@ -904,14 +904,10 @@ cluster_wbuild(struct vnode *vp, long size, daddr_t s= tart_lbn, int len, =20 /* * Check that the combined cluster - * would make sense with regard to pages - * and would not be too large + * would make sense with regard to pages. */ - if ((tbp->b_bcount !=3D size) || - ((bp->b_blkno + (dbsize * i)) !=3D - tbp->b_blkno) || - ((tbp->b_npages + bp->b_npages) > - (vp->v_mount->mnt_iosize_max / PAGE_SIZE))) { + if (tbp->b_bcount !=3D size || + bp->b_blkno + dbsize * i !=3D tbp->b_blkno) { BUF_UNLOCK(tbp); break; } @@ -964,6 +960,22 @@ cluster_wbuild(struct vnode *vp, long size, daddr_t st= art_lbn, int len, bp->b_pages[bp->b_npages] =3D m; bp->b_npages++; } + if (bp->b_npages > vp->v_mount-> + mnt_iosize_max / PAGE_SIZE) { + KASSERT(i !=3D 0, ("XXX")); + j++; + for (jj =3D 0; jj < j; jj++) { + vm_page_io_finish(tbp-> + b_pages[jj]); + } + vm_object_pip_subtract( + m->object, j); + bqrelse(tbp); + bp->b_npages -=3D j; + VM_OBJECT_WUNLOCK(tbp-> + b_bufobj->bo_object); + goto finishcluster; + } } VM_OBJECT_WUNLOCK(tbp->b_bufobj->bo_object); } --hCS/BWoPfTdmYtZi Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.20 (FreeBSD) iQIcBAEBAgAGBQJRtsUGAAoJEJDCuSvBvK1B8FUP/3J+JkxgJ7jdQvkOyp21fibx b/iiN19fnd3Ih1sDtLvKXFKDguf17vOxoECqnlhhRjrI8mJMsghqMjKJ11CUsZGq 9LrkXWCLiwtecuP7Rupu8hczAj+Msf1HGwZMtNVwDRAuhL9fE9WX/EiWXFV5D+Z+ 04SniVO6Fu+v9ZlPVjCaGhJMDsuMrtsphdiDpRjivgqWN85dvrGur2I8hYm6PTD4 1qBwxv3j5IR3dqRBFkZc+jrYjpRjA5UIAtmJc+3iJlZvL4963od1m48x0L+Wdtit +mfBDEaXN8gCAbtbN3QW1s+9WUKcqFcucYsECcb9wEjNi5aKjb0FLDPqEJWRoBVS dqHwXc8bI3KM3+fVoTIhTJDgmkTaCZEvTSCkmGgS1e5B7f4H5My+X7jzaonf7pl3 Jeoab2J6dZ6mwu1xh9Kk+nN80NwGiujx5hW9NgBC7MD7xxvQL5JGmwz/HU1LGZfO RL4Yi1g0dxobOWAfusK+rZDTEhzKts0vvrRgxk0O+LmEibx0WPcg/nkv8t60wE6U 4bBb7pxXudqTmmGuswKkGrNmP0F7HJFjn7kjkkbacnJRLPA9sOHh+MYW7V9dDIw5 T2Uk12Mm4aKX/hjHEWl6x87PIx384LyW9GiCkWcyFHqwH41SqYz7CgVUuNMqlv/P f6YwIcq9W9OocqF26iZ0 =DAlx -----END PGP SIGNATURE----- --hCS/BWoPfTdmYtZi--