summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authortrasz <trasz@FreeBSD.org>2014-03-25 11:53:47 +0000
committertrasz <trasz@FreeBSD.org>2014-03-25 11:53:47 +0000
commit57c5c942747cfe2cf61d45c980875c58189866b1 (patch)
tree5c08eb47554d3ecd20108f2cc4d4f76bb9554204 /usr.sbin
parentb76cdca91ab4f9c572da65df6e9d178f69eca4dc (diff)
downloadFreeBSD-src-57c5c942747cfe2cf61d45c980875c58189866b1.zip
FreeBSD-src-57c5c942747cfe2cf61d45c980875c58189866b1.tar.gz
MFC r261749:
Refactor. Sponsored by: The FreeBSD Foundation
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/ctld/ctld.c122
1 files changed, 64 insertions, 58 deletions
diff --git a/usr.sbin/ctld/ctld.c b/usr.sbin/ctld/ctld.c
index ce9408a..8e0d200 100644
--- a/usr.sbin/ctld/ctld.c
+++ b/usr.sbin/ctld/ctld.c
@@ -869,14 +869,74 @@ conf_print(struct conf *conf)
}
#endif
+static int
+conf_verify_lun(struct lun *lun)
+{
+ const struct lun *lun2;
+
+ if (lun->l_backend == NULL)
+ lun_set_backend(lun, "block");
+ if (strcmp(lun->l_backend, "block") == 0) {
+ if (lun->l_path == NULL) {
+ log_warnx("missing path for lun %d, target \"%s\"",
+ lun->l_lun, lun->l_target->t_iqn);
+ return (1);
+ }
+ } else if (strcmp(lun->l_backend, "ramdisk") == 0) {
+ if (lun->l_size == 0) {
+ log_warnx("missing size for ramdisk-backed lun %d, "
+ "target \"%s\"", lun->l_lun, lun->l_target->t_iqn);
+ return (1);
+ }
+ if (lun->l_path != NULL) {
+ log_warnx("path must not be specified "
+ "for ramdisk-backed lun %d, target \"%s\"",
+ lun->l_lun, lun->l_target->t_iqn);
+ return (1);
+ }
+ }
+ if (lun->l_lun < 0 || lun->l_lun > 255) {
+ log_warnx("invalid lun number for lun %d, target \"%s\"; "
+ "must be between 0 and 255", lun->l_lun,
+ lun->l_target->t_iqn);
+ return (1);
+ }
+#if 1 /* Should we? */
+ TAILQ_FOREACH(lun2, &lun->l_target->t_luns, l_next) {
+ if (lun == lun2)
+ continue;
+ if (lun->l_path != NULL && lun2->l_path != NULL &&
+ strcmp(lun->l_path, lun2->l_path) == 0)
+ log_debugx("WARNING: duplicate path for lun %d, "
+ "target \"%s\"", lun->l_lun, lun->l_target->t_iqn);
+ }
+#endif
+ if (lun->l_blocksize == 0) {
+ lun_set_blocksize(lun, DEFAULT_BLOCKSIZE);
+ } else if (lun->l_blocksize < 0) {
+ log_warnx("invalid blocksize for lun %d, target \"%s\"; "
+ "must be larger than 0", lun->l_lun, lun->l_target->t_iqn);
+ return (1);
+ }
+ if (lun->l_size != 0 && lun->l_size % lun->l_blocksize != 0) {
+ log_warnx("invalid size for lun %d, target \"%s\"; "
+ "must be multiple of blocksize", lun->l_lun,
+ lun->l_target->t_iqn);
+ return (1);
+ }
+
+ return (0);
+}
+
int
conf_verify(struct conf *conf)
{
struct auth_group *ag;
struct portal_group *pg;
struct target *targ;
- struct lun *lun, *lun2;
+ struct lun *lun;
bool found_lun0;
+ int error;
if (conf->conf_pidfile_path == NULL)
conf->conf_pidfile_path = checked_strdup(DEFAULT_PIDFILE);
@@ -895,65 +955,11 @@ conf_verify(struct conf *conf)
}
found_lun0 = false;
TAILQ_FOREACH(lun, &targ->t_luns, l_next) {
+ error = conf_verify_lun(lun);
+ if (error != 0)
+ return (error);
if (lun->l_lun == 0)
found_lun0 = true;
- if (lun->l_backend == NULL)
- lun_set_backend(lun, "block");
- if (strcmp(lun->l_backend, "block") == 0 &&
- lun->l_path == NULL) {
- log_warnx("missing path for lun %d, "
- "target \"%s\"", lun->l_lun, targ->t_iqn);
- return (1);
- }
- if (strcmp(lun->l_backend, "ramdisk") == 0) {
- if (lun->l_size == 0) {
- log_warnx("missing size for "
- "ramdisk-backed lun %d, "
- "target \"%s\"",
- lun->l_lun, targ->t_iqn);
- return (1);
- }
- if (lun->l_path != NULL) {
- log_warnx("path must not be specified "
- "for ramdisk-backed lun %d, "
- "target \"%s\"",
- lun->l_lun, targ->t_iqn);
- return (1);
- }
- }
- if (lun->l_lun < 0 || lun->l_lun > 255) {
- log_warnx("invalid lun number for lun %d, "
- "target \"%s\"; must be between 0 and 255",
- lun->l_lun, targ->t_iqn);
- return (1);
- }
-#if 1 /* Should we? */
- TAILQ_FOREACH(lun2, &targ->t_luns, l_next) {
- if (lun == lun2)
- continue;
- if (lun->l_path != NULL &&
- lun2->l_path != NULL &&
- strcmp(lun->l_path, lun2->l_path) == 0)
- log_debugx("WARNING: duplicate path "
- "for lun %d, target \"%s\"",
- lun->l_lun, targ->t_iqn);
- }
-#endif
- if (lun->l_blocksize == 0) {
- lun_set_blocksize(lun, DEFAULT_BLOCKSIZE);
- } else if (lun->l_blocksize <= 0) {
- log_warnx("invalid blocksize for lun %d, "
- "target \"%s\"; must be larger than 0",
- lun->l_lun, targ->t_iqn);
- return (1);
- }
- if (lun->l_size != 0 &&
- lun->l_size % lun->l_blocksize != 0) {
- log_warnx("invalid size for lun %d, target "
- "\"%s\"; must be multiple of blocksize",
- lun->l_lun, targ->t_iqn);
- return (1);
- }
}
if (!found_lun0) {
log_warnx("mandatory LUN 0 not configured "
OpenPOWER on IntegriCloud