diff options
author | Alasdair Kergon <agk@redhat.com> | 2001-11-16 15:38:52 +0000 |
---|---|---|
committer | Alasdair Kergon <agk@redhat.com> | 2001-11-16 15:38:52 +0000 |
commit | 835dab97ffbc5cdd4c646cecc86fc00b0000b6f1 (patch) | |
tree | 16b4cd334a81f36447fcbe16d203eedc431f34d5 | |
parent | fa904b53be21da10126aba4f8ae3636cdf63d0b5 (diff) | |
download | lvm2-835dab97ffbc5cdd4c646cecc86fc00b0000b6f1.tar.gz |
Zero first 4k of new LVs.
-rw-r--r-- | tools/lvcreate.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/tools/lvcreate.c b/tools/lvcreate.c index 19c40e2bc..803a624cd 100644 --- a/tools/lvcreate.c +++ b/tools/lvcreate.c @@ -6,6 +6,7 @@ */ #include "tools.h" +#include <fcntl.h> int lvcreate(int argc, char **argv) { @@ -220,9 +221,8 @@ int lvcreate(int argc, char **argv) } *************/ - if (!(lv = lv_create(lv_name, status, stripes, stripesize, extents, - vg, pvh))) - return ECMD_FAILED; + if (!(lv = lv_create(lv_name, status, stripes, stripesize, extents, + vg, pvh))) return ECMD_FAILED; if (arg_count(readahead_ARG)) { log_verbose("Setting read ahead sectors"); @@ -240,23 +240,27 @@ int lvcreate(int argc, char **argv) if (zero) { struct device *dev; - /* FIXME 2 blocks */ - char buf[4096]; + char *name; - memset(buf, 0, sizeof(buf)); + if (!(name = dbg_malloc(NAME_LEN))) { + log_error("Name allocation failed - device not zeroed"); + return ECMD_FAILED; + } - log_verbose("Zeroing start of logical volume %s", lv->name); + snprintf(name, NAME_LEN, "%s%s/%s", fid->cmd->dev_dir, + lv->vg->name, lv->name); - log_print("WARNING: %s not zeroed", lv->name); - /* FIXME get dev = dev_cache_get(lv->name, fid->cmd->filter); */ - /* FIXME Add fsync! */ -/******** FIXME Really zero it - if (!(dev_write(dev, 0, sizeof(buf), &buf) == sizeof(buf))) { - log_error("Initialisation of %s failed", - dev_name(dev)); + log_verbose("Zeroing start of logical volume %s", name); + + if (!(dev = dev_cache_get(name, NULL))) { + log_error("%s not found: device not zeroed", name); return ECMD_FAILED; } -**************/ + if (!(dev_open(dev, O_WRONLY))) + return ECMD_FAILED; + dev_zero(dev, 0, 4096); + dev_close(dev); + } else log_print("WARNING: %s not zeroed", lv->name); |