Skip to content

Commit

Permalink
Readd zpool_clear_label() from OpenSolaris
Browse files Browse the repository at this point in the history
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 <[email protected]>
Issue #1126
  • Loading branch information
pik4ez authored and behlendorf committed Jul 9, 2013
1 parent 5021058 commit 51a3ae7
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions lib/libzfs/libzfs_import.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 51a3ae7

Please sign in to comment.