cgget
, cgput
,
cgread
, cgread1
,
cgwrite
, cgwrite1
—
read/write cylinder groups of UFS disks
UFS File System Access Library (libufs, -lufs)
#include <sys/param.h>
#include <sys/mount.h>
#include <ufs/ufs/ufsmount.h>
#include <ufs/ufs/dinode.h>
#include <ufs/ffs/fs.h>
#include <libufs.h>
int
cgget
(int
devfd, struct fs
*fs, int cg,
struct cg *cgp);
int
cgput
(int
devfd, struct fs
*fs, struct cg
*cgp);
int
cgread
(struct
uufsd *disk);
int
cgread1
(struct
uufsd *disk, int
cg);
int
cgwrite
(struct
uufsd *disk);
int
cgwrite1
(struct
uufsd *disk, int
cg);
The cgget
(), cgread
(), and
cgread1
() functions provide cylinder group reads for
libufs(3)
consumers. The cgput
(),
cgwrite
(), and cgwrite1
()
functions provide cylinder group writes for
libufs(3)
consumers.
The cgget
() function reads the cylinder
group specified by cg into the buffer pointed to by
cgp from the filesystem described by the
fs superblock using the devfd
file descriptor that references the filesystem disk. The
cgget
() function is the only cylinder group read
function that is safe to use in threaded applications.
The cgput
() function writes the cylinder
group specified by cgp to the filesystem described by
the fs superblock using the
devfd file descriptor that references the filesystem
disk. The cgput
() function is the only cylinder
group write function that is safe to use in threaded applications. Note that
the cgput
() function needs to be called only if the
cylinder group has been modified and the on-disk copy needs to be
updated.
The cgread1
() function reads from the
cylinder group specified by cg into the
d_cg cylinder-group structure in a user-land UFS-disk
structure. It sets the d_lcg field to the cylinder
group number cg.
The cgread
() function operates on
sequential cylinder groups. Calling the cgread
()
function is equivalent to calling cgread1
() with a
cylinder group specifier equivalent to the value of the current
d_ccg field, and then incrementing the
d_ccg field.
The cgwrite
() function stores on disk the
cylinder group held in the d_cg cylinder-group
structure in a user-land UFS-disk structure.
The cgwrite1
() function provides no
additional functionality over the cgwrite
() function
as there is only one place that a given cylinder group can correctly be
written. If the caller gets the cg parameter wrong,
the function fails with the error EDOOFUS
. This
function remains only to provide backward compatibility.
The cgread
() function returns 0 if there are no more
cylinder groups to read, 1 if there are more cylinder groups, and -1 on error.
The cgread1
() function returns 1 on success and -1 on
error. The other functions return 0 on success and -1 on error.
The cgget
(), cgread
(), and
cgread1
() functions may fail and set
errno for any of the errors specified for the library
function
bread(3).
The cgput
(),
cgwrite
(), and cgwrite1
()
functions may fail and set errno for any of the errors
specified for the library function
bwrite(3).
Additionally the cgwrite1
() will return the
EDOOFUS
error if the cylinder group specified does
not match the cylinder group that it is requesting to write.
These functions first appeared as part of
libufs(3)
in FreeBSD 5.1.