[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Unblock request for openafs 1.4.12.1+dfsg-3



Hello folks,

I just uploaded openafs 1.4.12.1+dfsg-3, which contains some final fixes
that are targetted for squeeze based, in part, on discussion with upstream
after the freeze was announced.  Could you unblock it for squeeze?

Here are the annotated changes for this version:

  * Apply upstream deltas:
    - [639c0e46] ubik: ntohl on reading the replay log

The bug fixed by this change caused VLDB servers on little-endian
platforms to treat the replay log as invalid, possibly leading to data
loss during an unclean shutdown of the service.

    - [fd19dd09] vol AttachByName should mimic other volpkg errors

Fixes a problem with volumes going mysteriously off-line and becoming
impossible to attach in the AFS fileserver, and adds logging to try to
understand why this is happening.  This patch has been running in
production at UNCC for several weeks now.

    - [ebb6accf] Include com_err.h in dumpstuff.c

Ensures that function declarations are available, which avoids treating
the return value of afs_error_message as an integer cast to a pointer,
which could lead to segfaults on 64-bit platforms.

  * The openafs-fileserver init script now depends on $named since
    apparently the volserver requires DNS during startup.  Thanks, Jaap
    Winius.  (Closes: #589783)

One-line change to fix boot ordering.  (I also dropped $local_fs since
it's redundant with $remote_fs.)

  * Run the DKMS build commands in a subshell to work around a DKMS bug
    that caused the module build logs to be discarded.  (LP: #593509)

Two-line change to wrap the build commands in parens so that the output
redirection done by DKMS will redirect all the output, not just the output
of the last command.

  * Add a status command to the openafs-fileserver init script.

This is work that was already in the repository which was isolated and
shouldn't introduce any additional risk, so I didn't revert it for this
upload.

  * Update standards version to 3.9.1.
    - Remove obsolete conflicts/replaces/provides on openafs-ptutil.

openafs-ptutil is way older than oldstable, so there was no point in this.
There were no other changes in the standards-version bump.

Here is the full patch:

diff --git a/debian/changelog b/debian/changelog
index 1d52c09..7be4140 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,20 @@
+openafs (1.4.12.1+dfsg-3) unstable; urgency=low
+
+  * Apply upstream deltas:
+    - [639c0e46] ubik: ntohl on reading the replay log
+    - [fd19dd09] vol AttachByName should mimic other volpkg errors
+    - [ebb6accf] Include com_err.h in dumpstuff.c
+  * The openafs-fileserver init script now depends on $named since
+    apparently the volserver requires DNS during startup.  Thanks, Jaap
+    Winius.  (Closes: #589783)
+  * Run the DKMS build commands in a subshell to work around a DKMS bug
+    that caused the module build logs to be discarded.  (LP: #593509)
+  * Add a status command to the openafs-fileserver init script.
+  * Update standards version to 3.9.1.
+    - Remove obsolete conflicts/replaces/provides on openafs-ptutil.
+
+ -- Russ Allbery <rra@debian.org>  Tue, 10 Aug 2010 21:54:33 -0700
+
 openafs (1.4.12.1+dfsg-2) unstable; urgency=low
 
   * Apply upstream deltas to fix crashes in the file server:
diff --git a/debian/control b/debian/control
index fde7a22..33cce00 100644
--- a/debian/control
+++ b/debian/control
@@ -6,7 +6,7 @@ Uploaders: Sam Hartman <hartmans@debian.org>
 Build-Depends: debhelper (>= 7), autoconf, automake, bison, comerr-dev,
  cpio, dblatex, dkms (>= 2.1.1.1), docbook-xsl, doxygen, flex,
  libkrb5-dev, libncurses5-dev, libpam0g-dev, libxml2-utils, perl, xsltproc
-Standards-Version: 3.8.4
+Standards-Version: 3.9.1
 Homepage: http://www.openafs.org/
 Vcs-Git: git://git.debian.org/git/pkg-k5-afs/openafs.git
 Vcs-Browser: http://git.debian.org/?p=pkg-k5-afs/openafs.git
@@ -61,9 +61,6 @@ Architecture: alpha amd64 arm armel i386 ia64 powerpc powerpcspe ppc64 s390 s390
 Depends: ${shlibs:Depends}, ${perl:Depends}, ${misc:Depends},
  openafs-fileserver, openafs-client
 Suggests: openafs-doc
-Conflicts: openafs-ptutil
-Replaces: openafs-ptutil
-Provides: openafs-ptutil
 Description: AFS distributed filesystem database server
  AFS is a distributed filesystem allowing cross-platform sharing of
  files among multiple computers.  Facilities are provided for access
diff --git a/debian/openafs-fileserver.init b/debian/openafs-fileserver.init
index 5db0463..ea1b41f 100755
--- a/debian/openafs-fileserver.init
+++ b/debian/openafs-fileserver.init
@@ -1,8 +1,8 @@
 #! /bin/sh
 ### BEGIN INIT INFO
 # Provides:             openafs-fileserver
-# Required-Start:       $local_fs $remote_fs $network $time
-# Required-Stop:        $local_fs $remote_fs $network
+# Required-Start:       $remote_fs $network $time $named
+# Required-Stop:        $remote_fs $network
 # Default-Start:        2 3 4 5
 # Default-Stop:         0 1 6
 # Short-Description:    OpenAFS file and database server manager
@@ -25,8 +25,10 @@ DAEMON=/usr/sbin/bosserver
 DAEMON_ARGS=""
 SCRIPTNAME=/etc/init.d/openafs-fileserver
 
-# Exit if the package is not installed.
-[ -x "$DAEMON" ] || exit 0
+# Exit if the package is not installed and we were not given the status option.
+if [ ! -x "$DAEMON" ] && [ "status" != "$1" ] ; then
+    exit 0
+fi
 
 # Read configuration if it is present.
 [ -r /etc/default/openafs-fileserver ] && . /etc/default/openafs-fileserver
@@ -109,8 +111,27 @@ case "$1" in
     esac
     ;;
 
+  status)
+    start-stop-daemon --start --quiet --startas $DAEMON --name $NAME --test \
+        > /dev/null
+    case "$?" in
+      0)
+        echo "$NAME is not running"
+        exit 3
+        ;;
+      1)
+        echo "$NAME is running"
+        exit 0
+        ;;
+      *)
+        log_warning_msg "Cannot determine if $NAME is running"
+        exit 4
+        ;;
+    esac
+    ;;
+
   *)
-    echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
+    echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
     exit 3
     ;;
 esac
diff --git a/debian/openafs-modules-dkms.dkms b/debian/openafs-modules-dkms.dkms
index 7e4d438..3d064c7 100644
--- a/debian/openafs-modules-dkms.dkms
+++ b/debian/openafs-modules-dkms.dkms
@@ -8,7 +8,7 @@ BUILT_MODULE_NAME[0]="$PACKAGE_NAME"
 DEST_MODULE_LOCATION[0]="/updates/dkms/"
 AUTOINSTALL=yes
 
-MAKE[0]="./configure --with-linux-kernel-headers=${kernel_source_dir}
-    && make
-    && mv src/libafs/MODLOAD-*/openafs.ko ."
+MAKE[0]="(./configure --with-linux-kernel-headers=${kernel_source_dir}
+          && make
+          && mv src/libafs/MODLOAD-*/openafs.ko .)"
 CLEAN="rm -f openafs.ko && make -C src/libafs clean"
diff --git a/src/ubik/recovery.c b/src/ubik/recovery.c
index 33b95a3..581abe4 100644
--- a/src/ubik/recovery.c
+++ b/src/ubik/recovery.c
@@ -207,6 +207,7 @@ ReplayLog(register struct ubik_dbase *adbase)
 			     sizeof(afs_int32));
 	if (code != sizeof(afs_int32))
 	    break;
+	opcode = ntohl(opcode);
 	if (opcode == LOGNEW) {
 	    /* handle begin trans */
 	    tpos += sizeof(afs_int32);
@@ -231,7 +232,7 @@ ReplayLog(register struct ubik_dbase *adbase)
 	    if (code != 3 * sizeof(afs_int32))
 		break;
 	    /* otherwise, skip over the data bytes, too */
-	    tpos += buffer[2] + 3 * sizeof(afs_int32);
+	    tpos += ntohl(buffer[2]) + 3 * sizeof(afs_int32);
 	} else {
 	    ubik_dprint("corrupt log opcode (%d) at position %d\n", opcode,
 			tpos);
@@ -250,6 +251,7 @@ ReplayLog(register struct ubik_dbase *adbase)
 				 sizeof(afs_int32));
 	    if (code != sizeof(afs_int32))
 		break;
+	    opcode = ntohl(opcode);
 	    if (opcode == LOGNEW) {
 		/* handle begin trans */
 		tpos += sizeof(afs_int32);
diff --git a/src/vol/volume.c b/src/vol/volume.c
index 503dda2..8af3c66 100644
--- a/src/vol/volume.c
+++ b/src/vol/volume.c
@@ -979,6 +979,20 @@ attach2(Error * ec, char *path, register struct VolumeHeader * header,
 	    V_inUse(vp) = 1;
 	    V_offlineMessage(vp)[0] = '\0';
 	}
+	if (!V_inUse(vp)) {
+	    *ec = VNOVOL;
+	    /* mimic e.g. GetVolume errors */
+	    if (!V_blessed(vp))
+		Log("Volume %u offline: not blessed\n", V_id(vp));
+	    else if (!V_inService(vp))
+		Log("Volume %u offline: not in service\n", V_id(vp));
+	    else {
+		Log("Volume %u offline: needs salvage\n", V_id(vp));
+		*ec = VOFFLINE;
+	    }
+	    VPutVolume_r(vp);
+	    vp = NULL;
+	}
     }
 
     return vp;
diff --git a/src/volser/dumpstuff.c b/src/volser/dumpstuff.c
index f8ff68d..6989254 100644
--- a/src/volser/dumpstuff.c
+++ b/src/volser/dumpstuff.c
@@ -45,6 +45,7 @@
 #include "dump.h"
 #include <afs/fssync.h>
 #include <afs/acl.h>
+#include <afs/com_err.h>
 #include "volser.h"
 #include "volint.h"
 
-- 
Russ Allbery (rra@debian.org)               <http://www.eyrie.org/~eagle/>


Reply to: