summaryrefslogtreecommitdiffstats
path: root/drivers/target/iscsi
diff options
context:
space:
mode:
authorDax Kelson <dkelson@gurulabs.com>2012-02-03 23:40:25 -0700
committerNicholas Bellinger <nab@linux-iscsi.org>2012-02-07 06:48:53 +0000
commit9f9ef6d3c08319defc29e4cf6ef2868d15ed0cc3 (patch)
treedab36bf875ce037be9fc59b7fab101dce192d188 /drivers/target/iscsi
parent5c55125f4794f4e77574fc09839cb47b0eb45b06 (diff)
downloadlinux-9f9ef6d3c08319defc29e4cf6ef2868d15ed0cc3.tar.gz
linux-9f9ef6d3c08319defc29e4cf6ef2868d15ed0cc3.tar.bz2
linux-9f9ef6d3c08319defc29e4cf6ef2868d15ed0cc3.zip
iscsi: use IP_FREEBIND socket option
Use IP_FREEBIND socket option so that iscsi portal configuration with explicit IP addresses can happen during boot, before network interfaces have been assigned IPs. This is especially important on systemd based Linux boxes where system boot happens asynchronously and non-trivial configuration must be done to get targetcli.service to start synchronously after the network is configured. Reference: http://lists.fedoraproject.org/pipermail/devel/2011-October/158025.html Signed-off-by: Dax Kelson <dkelson@gurulabs.com> Cc: "Nicholas A. Bellinger" <nab@linux-iscsi.org> Cc: "Andy Grover" <agrover@redhat.com> Cc: "Lennart Poettering" <lennart@poettering.net> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target/iscsi')
-rw-r--r--drivers/target/iscsi/iscsi_target_login.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c
index ec47a7c5966e..38cb7ce8469e 100644
--- a/drivers/target/iscsi/iscsi_target_login.c
+++ b/drivers/target/iscsi/iscsi_target_login.c
@@ -842,6 +842,14 @@ int iscsi_target_setup_login_socket(
goto fail;
}
+ ret = kernel_setsockopt(sock, IPPROTO_IP, IP_FREEBIND,
+ (char *)&opt, sizeof(opt));
+ if (ret < 0) {
+ pr_err("kernel_setsockopt() for IP_FREEBIND"
+ " failed\n");
+ goto fail;
+ }
+
ret = kernel_bind(sock, (struct sockaddr *)&np->np_sockaddr, len);
if (ret < 0) {
pr_err("kernel_bind() failed: %d\n", ret);