Subject: Re: lseek() extension for spare files
To: Jason Thorpe <thorpej@shagadelic.org>
From: Bill Studenmund <wrstuden@netbsd.org>
List: tech-kern
Date: 09/21/2006 17:07:38
--kA1LkgxZ0NN7Mz3A
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Thu, Sep 21, 2006 at 01:51:28PM -0700, Jason Thorpe wrote:
>=20
> On Sep 20, 2006, at 6:44 PM, Reinoud Zandijk wrote:
>=20
> So, it looks like these new whence arguments are essentially designed =20
> to enumerate the holes or filled regions of the file.
>=20
> I don't see anything particularly wrong with having it (note I have =20
> not yet reviewed the actual patch), but what's the application usage?
Ok, I'm assuming Jason understands why we want to know about holes and=20
was asking more how the application would use it, not why it would use=20
it. :-)
I expect that how you'd use it is something like (warning, pseudo-code,=20
lots of stuff glossed over):
fd =3D open("the/file", O_RDONLY, 0);
fstat(fd, &statblock); /* Now know file's size */
if (statblock.st_size =3D=3D 0) {
/* Handle a zero-length file */
return;
}
o_data =3D lseek(fd, 0, SEEK_DATA);
if (o_data) {
/* We started with a hole */
o_hole =3D 0;
} else {
/* We started with data */
o_hole =3D lseek(fd, 0, SEEK_HOLE);
}
o =3D 0;
while (o < statblock.st_size) {
if (o =3D=3D o_data) {
/* o through o_hole is a run of data */
do.something.with.data;
o =3D o_hole;
o_data =3D lseek(fd, o_hole, SEEK_DATA);
} else {
/* o through o_data is a hole */
do.something.with.a.hole;
o =3D o_data;
o_hole =3D lseek(fd, o_data, SEEK_HOLE);
}
}
I wrote all the above out to make sure I understand how this is supposed=20
to be used, and, assuming I'm right, to hopefully explain it to others.=20
:-)
The above's pseudo-code, and there are other ways we could have handled=20
the hopping between holes and data runs.
Take care,
Bill
--kA1LkgxZ0NN7Mz3A
Content-Type: application/pgp-signature
Content-Disposition: inline
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (NetBSD)
iD8DBQFFEylKWz+3JHUci9cRAiMRAKCXCHYDgmkjZLbPcZoLHjYN1mJmVACff1m2
2/XgCQNYwTrUFQMLq6xkfPs=
=UDLC
-----END PGP SIGNATURE-----
--kA1LkgxZ0NN7Mz3A--