[Cluster-devel] [PATCH] fence_scsi: remove unlink of fence_scsi.dev file

Ryan O'Hara rohara at redhat.com
Tue Sep 27 22:21:35 UTC 2011


This patch removes the call to unlink the fence_scsi.dev file during
unfencing (action=on). Instead of unlinking the file, check to see if
the current device is already in the fence_scsi.dev file before writing
it to the file. Note that since this file exists in /var/run/cluster
directory, it should be removed on reboot.

Resolves: rhbz#741339

Signed-off-by: Ryan O'Hara <rohara at redhat.com>
---
 fence/agents/scsi/fence_scsi.pl |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/fence/agents/scsi/fence_scsi.pl b/fence/agents/scsi/fence_scsi.pl
index 93f5056..87a599c 100644
--- a/fence/agents/scsi/fence_scsi.pl
+++ b/fence/agents/scsi/fence_scsi.pl
@@ -41,7 +41,6 @@ sub do_action_on ($@)
     my $self = (caller(0))[3];
     my ($node_key, @devices) = @_;
 
-    dev_unlink ();
     key_write ($node_key);
 
     foreach $dev (@devices) {
@@ -369,8 +368,17 @@ sub dev_write ($)
 	mkpath ("/var/run/cluster");
     }
 
-    open (\*FILE, ">>$file") or die "$!\n";
-    print FILE "$dev\n";
+    open (\*FILE, "+>>$file") or die "$!\n";
+
+    ## since the file is opened for read, write and append,
+    ## we need to seek to the beginning of the file before grep.
+
+    seek (FILE, 0, 0);
+
+    if (! grep { /^$dev$/ } <FILE>) {
+	print FILE "$dev\n";
+    }
+
     close (FILE);
 
     return;
-- 
1.7.3.4




More information about the Cluster-devel mailing list