Readd zpool_clear_label() from OpenSolaris
This patch restores the zpool_clear_label() function from OpenSolaris. This was removed by commit d603ed6 because it wasn't clear we had a use for it in ZoL. However, this functionality is a prerequisite for adding the 'zpool labelclear' command from FreeBSD. As part of bringing this change in the zpool_clear_label() function was changed to use fstat64_blk(2) for compatibility with Linux. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Issue #1126
This commit is contained in:
parent
5021058756
commit
51a3ae72d2
@ -900,6 +900,36 @@ zpool_read_label(int fd, nvlist_t **config)
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Given a file descriptor, clear (zero) the label information. This function
|
||||
* is currently only used in the appliance stack as part of the ZFS sysevent
|
||||
* module.
|
||||
*/
|
||||
int
|
||||
zpool_clear_label(int fd)
|
||||
{
|
||||
struct stat64 statbuf;
|
||||
int l;
|
||||
vdev_label_t *label;
|
||||
uint64_t size;
|
||||
|
||||
if (fstat64_blk(fd, &statbuf) == -1)
|
||||
return (0);
|
||||
size = P2ALIGN_TYPED(statbuf.st_size, sizeof (vdev_label_t), uint64_t);
|
||||
|
||||
if ((label = calloc(sizeof (vdev_label_t), 1)) == NULL)
|
||||
return (-1);
|
||||
|
||||
for (l = 0; l < VDEV_LABELS; l++) {
|
||||
if (pwrite64(fd, label, sizeof (vdev_label_t),
|
||||
label_offset(size, l)) != sizeof (vdev_label_t))
|
||||
return (-1);
|
||||
}
|
||||
|
||||
free(label);
|
||||
return (0);
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBBLKID
|
||||
/*
|
||||
* Use libblkid to quickly search for zfs devices
|
||||
|
Loading…
x
Reference in New Issue
Block a user