From owner-freebsd-stable Mon Jul 21 23:48:08 1997 Return-Path: Received: (from root@localhost) by hub.freebsd.org (8.8.5/8.8.5) id XAA10653 for stable-outgoing; Mon, 21 Jul 1997 23:48:08 -0700 (PDT) Received: from godzilla.zeta.org.au (godzilla.zeta.org.au [203.2.228.19]) by hub.freebsd.org (8.8.5/8.8.5) with ESMTP id XAA10647 for ; Mon, 21 Jul 1997 23:48:05 -0700 (PDT) Received: (from bde@localhost) by godzilla.zeta.org.au (8.8.5/8.6.9) id QAA14661; Tue, 22 Jul 1997 16:40:39 +1000 Date: Tue, 22 Jul 1997 16:40:39 +1000 From: Bruce Evans Message-Id: <199707220640.QAA14661@godzilla.zeta.org.au> To: cdillon@tri-lakes.net, haplo@ibm.net Subject: Re: mount_msdos -- is it safe yet? Cc: freebsd-stable@FreeBSD.ORG Sender: owner-freebsd-stable@FreeBSD.ORG X-Loop: FreeBSD.org Precedence: bulk >I apparently escaped the problem without knowing it by mounting drives >no larger than 528MB (i always split my DOS drives up to make up for the >FAT kludge of wasting cluster space). I ususally have about 5 DOS >partitions mounted, all 528 MB except for the last one which is even >smaller. I think you mean 512MB, but the problem was actually for (msdosfs) cluster sizes larger than the old value of MAXBSIZE (16K). Such cluster sizes normally occur for file systems larger than 512MB, but they can occur for any size of file system, e.g., when a file system that was initially larger than 512MB is shrunk using FIPS to any size. Shrinking sometimes causes the warning "root directory is not a multiple of the cluster size in length". This is not a problem, but it is sometimes confused with the real one. getblk() used to accept requests for blocks larger than the maximum supported and allocate only MAXBSIZE bytes for them. This caused neighboring blocks (perhaps belonging to other file systems) in the buffer cache to be trashed when the allocated space was overrun. Now getblk() panics instead, and MAXBSIZE is 64K, so all possible msdosfs cluster sizes work. msdsofs is still too broken to reject cluster sizes >= MAXBSIZE like ufs does. getblk() is still broken in 2.1. Bruce