Hello community,
here is the log from the commit of package iprutils for openSUSE:Factory checked in at 2013-07-05 15:04:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/iprutils (Old)
and /work/SRC/openSUSE:Factory/.iprutils.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "iprutils"
Changes:
--------
--- /work/SRC/openSUSE:Factory/iprutils/iprutils.changes 2013-01-20 07:51:14.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.iprutils.new/iprutils.changes 2013-07-05 15:04:49.000000000 +0200
@@ -1,0 +2,12 @@
+Thu Jul 4 12:04:19 UTC 2013 - dvaleev@suse.com
+
+- Release 2.3.15
+ - Add support for 4K bytes/sector disks in iprutils
+- Release 2.3.14
+ - Fixes stale information after hot plug a disk into an array
+ - Segmentation fault when removing a disk with hot spare disk
+ - Fxied sysfs error when updating microcode
+ - Fixes the platform location issue for Tres drawer
+ - Fix hop count defines
+
+-------------------------------------------------------------------
Old:
----
iprutils-2.3.13-src.tgz
New:
----
iprutils-2.3.15-src.tgz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ iprutils.spec ++++++
--- /var/tmp/diff_new_pack.peSZkD/_old 2013-07-05 15:04:50.000000000 +0200
+++ /var/tmp/diff_new_pack.peSZkD/_new 2013-07-05 15:04:50.000000000 +0200
@@ -19,7 +19,7 @@
Name: iprutils
# NOTE: package's changelog is hidden in % changelog section
# in file iprutils/spec/iprutils.spec
-Version: 2.3.13
+Version: 2.3.15
Release: 0
Summary: Utilities for the IBM Power Linux RAID Adapters
License: CPL-1.0
++++++ iprutils-2.3.13-src.tgz -> iprutils-2.3.15-src.tgz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/HEAD new/iprutils/.git/HEAD
--- old/iprutils/.git/HEAD 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/HEAD 2013-07-03 17:59:57.000000000 +0200
@@ -0,0 +1 @@
+ref: refs/heads/master
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/config new/iprutils/.git/config
--- old/iprutils/.git/config 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/config 2013-07-03 17:59:57.000000000 +0200
@@ -0,0 +1,11 @@
+[core]
+ repositoryformatversion = 0
+ filemode = true
+ bare = false
+ logallrefupdates = true
+[remote "origin"]
+ fetch = +refs/heads/*:refs/remotes/origin/*
+ url = ssh://wenxiong@git.code.sf.net/p/iprdd/iprutils
+[branch "master"]
+ remote = origin
+ merge = refs/heads/master
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/description new/iprutils/.git/description
--- old/iprutils/.git/description 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/description 2013-07-03 17:59:48.000000000 +0200
@@ -0,0 +1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/hooks/applypatch-msg.sample new/iprutils/.git/hooks/applypatch-msg.sample
--- old/iprutils/.git/hooks/applypatch-msg.sample 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/hooks/applypatch-msg.sample 2013-07-03 17:59:48.000000000 +0200
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit. The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+ exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/hooks/commit-msg.sample new/iprutils/.git/hooks/commit-msg.sample
--- old/iprutils/.git/hooks/commit-msg.sample 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/hooks/commit-msg.sample 2013-07-03 17:59:48.000000000 +0200
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message. The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit. The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+ sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
+ echo >&2 Duplicate Signed-off-by lines.
+ exit 1
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/hooks/post-commit.sample new/iprutils/.git/hooks/post-commit.sample
--- old/iprutils/.git/hooks/post-commit.sample 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/hooks/post-commit.sample 2013-07-03 17:59:48.000000000 +0200
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script that is called after a successful
+# commit is made.
+#
+# To enable this hook, rename this file to "post-commit".
+
+: Nothing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/hooks/post-receive.sample new/iprutils/.git/hooks/post-receive.sample
--- old/iprutils/.git/hooks/post-receive.sample 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/hooks/post-receive.sample 2013-07-03 17:59:48.000000000 +0200
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script for the "post-receive" event.
+#
+# The "post-receive" script is run after receive-pack has accepted a pack
+# and the repository has been updated. It is passed arguments in through
+# stdin in the form
+# <oldrev> <newrev> <refname>
+# For example:
+# aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
+#
+# see contrib/hooks/ for a sample, or uncomment the next line and
+# rename the file to "post-receive".
+
+#. /usr/share/git-core/contrib/hooks/post-receive-email
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/hooks/post-update.sample new/iprutils/.git/hooks/post-update.sample
--- old/iprutils/.git/hooks/post-update.sample 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/hooks/post-update.sample 2013-07-03 17:59:48.000000000 +0200
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/hooks/pre-applypatch.sample new/iprutils/.git/hooks/pre-applypatch.sample
--- old/iprutils/.git/hooks/pre-applypatch.sample 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/hooks/pre-applypatch.sample 2013-07-03 17:59:48.000000000 +0200
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+ exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/hooks/pre-commit.sample new/iprutils/.git/hooks/pre-commit.sample
--- old/iprutils/.git/hooks/pre-commit.sample 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/hooks/pre-commit.sample 2013-07-03 17:59:48.000000000 +0200
@@ -0,0 +1,46 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments. The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+ against=HEAD
+else
+ # Initial commit: diff against an empty tree object
+ against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ascii filenames set this variable to true.
+allownonascii=$(git config hooks.allownonascii)
+
+# Cross platform projects tend to avoid non-ascii filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+ # Note that the use of brackets around a tr range is ok here, (it's
+ # even required, for portability to Solaris 10's /usr/bin/tr), since
+ # the square bracket bytes happen to fall in the designated range.
+ test "$(git diff --cached --name-only --diff-filter=A -z $against |
+ LC_ALL=C tr -d '[ -~]\0')"
+then
+ echo "Error: Attempt to add a non-ascii file name."
+ echo
+ echo "This can cause problems if you want to work"
+ echo "with people on other platforms."
+ echo
+ echo "To be portable it is advisable to rename the file ..."
+ echo
+ echo "If you know what you are doing you can disable this"
+ echo "check using:"
+ echo
+ echo " git config hooks.allownonascii true"
+ echo
+ exit 1
+fi
+
+exec git diff-index --check --cached $against --
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/hooks/pre-rebase.sample new/iprutils/.git/hooks/pre-rebase.sample
--- old/iprutils/.git/hooks/pre-rebase.sample 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/hooks/pre-rebase.sample 2013-07-03 17:59:48.000000000 +0200
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+ topic="refs/heads/$2"
+else
+ topic=`git symbolic-ref HEAD` ||
+ exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+ ;;
+*)
+ exit 0 ;# we do not interrupt others.
+ ;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master. Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+ echo >&2 "No such branch $topic"
+ exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+ echo >&2 "$topic is fully merged to master; better remove it."
+ exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next? If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+ not_in_topic=`git rev-list "^$topic" master`
+ if test -z "$not_in_topic"
+ then
+ echo >&2 "$topic is already up-to-date with master"
+ exit 1 ;# we could allow it, but there is no point.
+ else
+ exit 0
+ fi
+else
+ not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+ /usr/bin/perl -e '
+ my $topic = $ARGV[0];
+ my $msg = "* $topic has commits already merged to public branch:\n";
+ my (%not_in_next) = map {
+ /^([0-9a-f]+) /;
+ ($1 => 1);
+ } split(/\n/, $ARGV[1]);
+ for my $elem (map {
+ /^([0-9a-f]+) (.*)$/;
+ [$1 => $2];
+ } split(/\n/, $ARGV[2])) {
+ if (!exists $not_in_next{$elem->[0]}) {
+ if ($msg) {
+ print STDERR $msg;
+ undef $msg;
+ }
+ print STDERR " $elem->[1]\n";
+ }
+ }
+ ' "$topic" "$not_in_next" "$not_in_master"
+ exit 1
+fi
+
+exit 0
+
+################################################################
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+ merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+ it is deleted. If you need to build on top of it to correct
+ earlier mistakes, a new topic branch is created by forking at
+ the tip of the "master". This is not strictly necessary, but
+ it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+ branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next". Young
+ topic branches can have stupid mistakes you would rather
+ clean up before publishing, and things that have not been
+ merged into other branches can be easily rebased without
+ affecting other people. But once it is published, you would
+ not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+ Then you can delete it. More importantly, you should not
+ build on top of it -- other people may already want to
+ change things related to the topic as patches against your
+ "master", so if you need further changes, it is better to
+ fork the topic (perhaps with the same name) afresh from the
+ tip of "master".
+
+Let's look at this example:
+
+ o---o---o---o---o---o---o---o---o---o "next"
+ / / / /
+ / a---a---b A / /
+ / / / /
+ / / c---c---c---c B /
+ / / / \ /
+ / / / b---b C \ /
+ / / / / \ /
+ ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished. It has been fully merged up to "master" and "next",
+ and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+ git rev-list ^master ^topic next
+ git rev-list ^master next
+
+ if these match, topic has not merged in next at all.
+
+To compute (2):
+
+ git rev-list master..topic
+
+ if this is empty, it is fully merged to "master".
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/hooks/prepare-commit-msg.sample new/iprutils/.git/hooks/prepare-commit-msg.sample
--- old/iprutils/.git/hooks/prepare-commit-msg.sample 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/hooks/prepare-commit-msg.sample 2013-07-03 17:59:48.000000000 +0200
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source. The hook's purpose is to edit the commit
+# message file. If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples. The first comments out the
+# "Conflicts:" part of a merge commit.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output. It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited. This is rarely a good idea.
+
+case "$2,$3" in
+ merge,)
+ /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+
+# ,|template,)
+# /usr/bin/perl -i.bak -pe '
+# print "\n" . `git diff --cached --name-status -r`
+# if /^#/ && $first++ == 0' "$1" ;;
+
+ *) ;;
+esac
+
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/hooks/update.sample new/iprutils/.git/hooks/update.sample
--- old/iprutils/.git/hooks/update.sample 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/hooks/update.sample 2013-07-03 17:59:48.000000000 +0200
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+# This boolean sets whether unannotated tags will be allowed into the
+# repository. By default they won't be.
+# hooks.allowdeletetag
+# This boolean sets whether deleting tags will be allowed in the
+# repository. By default they won't be.
+# hooks.allowmodifytag
+# This boolean sets whether a tag may be modified after creation. By default
+# it won't be.
+# hooks.allowdeletebranch
+# This boolean sets whether deleting branches will be allowed in the
+# repository. By default they won't be.
+# hooks.denycreatebranch
+# This boolean sets whether remotely creating branches will be denied
+# in the repository. By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+ echo "Don't run this script from the command line." >&2
+ echo " (if you want, you could supply GIT_DIR then run" >&2
+ echo " $0 <ref> <oldrev> <newrev>)" >&2
+ exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+ echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
+ exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+ echo "*** Project description file hasn't been set" >&2
+ exit 1
+ ;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+ newrev_type=delete
+else
+ newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+ refs/tags/*,commit)
+ # un-annotated tag
+ short_refname=${refname##refs/tags/}
+ if [ "$allowunannotated" != "true" ]; then
+ echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+ echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+ exit 1
+ fi
+ ;;
+ refs/tags/*,delete)
+ # delete tag
+ if [ "$allowdeletetag" != "true" ]; then
+ echo "*** Deleting a tag is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ refs/tags/*,tag)
+ # annotated tag
+ if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+ then
+ echo "*** Tag '$refname' already exists." >&2
+ echo "*** Modifying a tag is not allowed in this repository." >&2
+ exit 1
+ fi
+ ;;
+ refs/heads/*,commit)
+ # branch
+ if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+ echo "*** Creating a branch is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ refs/heads/*,delete)
+ # delete branch
+ if [ "$allowdeletebranch" != "true" ]; then
+ echo "*** Deleting a branch is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ refs/remotes/*,commit)
+ # tracking branch
+ ;;
+ refs/remotes/*,delete)
+ # delete tracking branch
+ if [ "$allowdeletebranch" != "true" ]; then
+ echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ *)
+ # Anything else (is there anything else?)
+ echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+ exit 1
+ ;;
+esac
+
+# --- Finished
+exit 0
Files old/iprutils/.git/index and new/iprutils/.git/index differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/info/exclude new/iprutils/.git/info/exclude
--- old/iprutils/.git/info/exclude 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/info/exclude 2013-07-03 17:59:48.000000000 +0200
@@ -0,0 +1,6 @@
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/logs/HEAD new/iprutils/.git/logs/HEAD
--- old/iprutils/.git/logs/HEAD 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/logs/HEAD 2013-07-03 17:59:57.000000000 +0200
@@ -0,0 +1 @@
+0000000000000000000000000000000000000000 363a09754976f954d1d0d8576adddea4c5497b14 root 1372867197 -0500 clone: from ssh://wenxiong@git.code.sf.net/p/iprdd/iprutils
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/logs/refs/heads/master new/iprutils/.git/logs/refs/heads/master
--- old/iprutils/.git/logs/refs/heads/master 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/logs/refs/heads/master 2013-07-03 17:59:57.000000000 +0200
@@ -0,0 +1 @@
+0000000000000000000000000000000000000000 363a09754976f954d1d0d8576adddea4c5497b14 root 1372867197 -0500 clone: from ssh://wenxiong@git.code.sf.net/p/iprdd/iprutils
Files old/iprutils/.git/objects/pack/pack-45efb5fc99e7e2299698c9eb6ad13e719410e681.idx and new/iprutils/.git/objects/pack/pack-45efb5fc99e7e2299698c9eb6ad13e719410e681.idx differ
Files old/iprutils/.git/objects/pack/pack-45efb5fc99e7e2299698c9eb6ad13e719410e681.pack and new/iprutils/.git/objects/pack/pack-45efb5fc99e7e2299698c9eb6ad13e719410e681.pack differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/packed-refs new/iprutils/.git/packed-refs
--- old/iprutils/.git/packed-refs 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/packed-refs 2013-07-03 17:59:57.000000000 +0200
@@ -0,0 +1,100 @@
+# pack-refs with: peeled
+17692fd5a13e35a6d3a283fc2334a53ea07f342c refs/tags/start
+44e4e925a9acb392006108b270f9ccd625f7b963 refs/tags/show
+^b87d6d7d24db3cc53334d72951bb57b32af0330e
+1f290e5b212233899ebabd908a8767a07485fd31 refs/tags/rel-2-3-9
+^ebd1142d304ab9cb082fd4765cd572a781ccdd53
+dca05e8116353b0c8664a36b341c83fdff4126d6 refs/tags/rel-2-3-8
+^ea98944a9a02d9bf45fcbddfdd17f0395b17c790
+017d4e6a79e6b74796b36ff40f0c5400841515cb refs/tags/rel-2-3-7
+^a1bcd6711bd2062d7b02d8f59cd0ab50c62686a7
+045d5bc6fcab6c30dfb88aec3a2a4117df9cab5a refs/tags/rel-2-3-6
+^a9a6e2607796cc8427ed93cec1ccfcbb8ba23af4
+ac2a7d7eb375ab609dc155d82da2138cf38c9935 refs/tags/rel-2-3-5
+^8b15ab95745b9b57955f79de55efa229b88d71da
+a011831f6014e245417205ca6b5d9363c7646b8b refs/tags/rel-2-3-4
+^b8cb3b0911e40e8b5bb8adfda19901e39609bdc2
+289037d6c2c7fb1874979ccc049d953cc9d5924e refs/tags/rel-2-3-3
+^bdd0238b395d81b426ebd75857745c696de0bab7
+44e4e925a9acb392006108b270f9ccd625f7b963 refs/tags/rel-2-3-2
+^b87d6d7d24db3cc53334d72951bb57b32af0330e
+b1ddcd9697cd64a7c97cd27ee2eac0c6b7c8b138 refs/tags/rel-2-3-13
+^41a82b487901e4814d4a362b875c9b5e428bc5f7
+d9c79306d8dc0ddd7ff48ec556903e8f10411f38 refs/tags/rel-2-3-12
+^44607dc8d7829fe22bc324e9572e30ee796ce793
+f3b1677f6e344115135d383d2f20a9688ccf1ab1 refs/tags/rel-2-3-11
+^37690cdc9df1ecc135f7c159a9349afa5ed853cc
+b8efe554e5dd384bbdb0c229ab3e74536a3eff4c refs/tags/rel-2-3-10
+^8c94ac7a4f4d9c140ed3667d47e5f165add009ca
+9c421c4667243dc574e8038415502f85078a2109 refs/tags/rel-2-3-1
+^3e09808a549cde65fc437742eac18be53a7de247
+7d5943f85316b6e2a12083de7429d0b7e9a19d5a refs/tags/rel-2-3-0
+^0f513ca9b4736aeda8a0c6cac9440248d29637fe
+6039126be72eeb94cbb628c0ec7e118b394ad917 refs/tags/rel-2-2-9
+ba9d17e75801107b458096643acd2d615617a530 refs/tags/rel-2-2-8
+20f1aeef9760b1453c9c825b3c9f5b1f6b34d3f5 refs/tags/rel-2-2-7
+11d914fdcdff8975f095103a687a104fd8a6a0e2 refs/tags/rel-2-2-6
+0a24e290e9474da97637d2987a2c87f1b55a75d8 refs/tags/rel-2-2-5
+3c87a05c228d2474ed25cd9257020f5deb68d72b refs/tags/rel-2-2-4
+60618de499405a7427c2fd83ccc95edaf8e8a6b9 refs/tags/rel-2-2-3
+1011c13d7285f04b5d70a34eea5d29522ca11dc8 refs/tags/rel-2-2-21
+^59e71cda1cfbfe03b9b5470e51705f31864e0dcd
+0c31a6773a158fd155fe451ffc002492f0716975 refs/tags/rel-2-2-20
+^8cca65671f8926bb9cd68c7aaf0fcb3469078843
+6aef88a630e6e3dad0dd7c475a5e46184030c19b refs/tags/rel-2-2-2
+5f05b7308ba621a5a5ea04c5f9f92f548fb94e56 refs/tags/rel-2-2-19
+^ed4a0f080166c2157171f493746580d3263d9fdc
+1ba7fa46c301dc81a557f5a0ffe315dd0e7df61b refs/tags/rel-2-2-18
+1add13d903d738489dddecb6845d3306333987bb refs/tags/rel-2-2-17
+a66ddbc2b8f65aecf4020af63780d7f6cf471c7e refs/tags/rel-2-2-16
+a6b87e63edef2c46ad960d0938a7b9343d51381f refs/tags/rel-2-2-15
+7b2f28e47c13357fc0a848fd16559e55014d830c refs/tags/rel-2-2-14
+335a13040d3f5e09db28f87abbf35adce0fb6579 refs/tags/rel-2-2-13
+b439704c40480065ec4eb7d6831284c224c56dba refs/tags/rel-2-2-12
+425b5770508800919d9bf2bd40472d1fd8fcc690 refs/tags/rel-2-2-11
+edb6130e5c89dbe1c54fc6f021a173209a074539 refs/tags/rel-2-2-10
+494e95957ccb1028ab2ca6bed74a4668f5cecb53 refs/tags/rel-2-2-0
+51eef9f277e24e9ea169193ce9d75529dc1793bd refs/tags/rel-2-1-5
+03125e70ac953c5d1de250262975461adf519d9a refs/tags/rel-2-1-4
+cf5bc5ec5d80e6c7485c8291f1a406afd4821c43 refs/tags/rel-2-1-3
+a7b62cde75fbd59c0b66a2d836ee8adfa3ddcf5e refs/tags/rel-2-1-2
+73d9afa174f2572419cc8b1ba56d6696b68bf0bc refs/tags/rel-2-1-1
+0855f112de044508e9a0b577ff6ed86d2800c2e5 refs/tags/rel-2-1-0
+ff437e18f9b642b56280dc3f6db234b770401f02 refs/tags/rel-2-0-9
+ad5b85323404b3385501e219314f5417819484df refs/tags/rel-2-0-8
+7a9d059b33e4b4d54e5b438c13f2eab3e197cf81 refs/tags/rel-2-0-7
+ad447a68cbf788cf258c16c9512a1c863a2bd449 refs/tags/rel-2-0-6
+7f2e686db503120e0688166c85e1c91f89c0d6a7 refs/tags/rel-2-0-5
+a85bb5965da6ac7a2c2c2794a151cd1ca5589c05 refs/tags/rel-2-0-4
+82f650b3371b809ca06d52718e6899ddd1116340 refs/tags/rel-2-0-3
+60c63b919e07f28858ee179cff12bc605f16ab08 refs/tags/rel-2-0-2-2
+ad28a07002f271806c1bd1460b66e8a057f5a587 refs/tags/rel-2-0-2-1
+0d87e657439549c60007c7bd070e532cfdf51bd1 refs/tags/rel-2-0-15-8
+6ab484fe87765e27ae03125976fce5040ba495c7 refs/tags/rel-2-0-15-7
+ed18281979189bcbb85ead3f71d1b24c0e55c8ec refs/tags/rel-2-0-15-6
+a39fe1572823a8d440957a52040951f5b5222c2e refs/tags/rel-2-0-15-5
+e0fd24f83e7d4f36663474b5bf12ccf03ab6f37b refs/tags/rel-2-0-15-4
+86c79d0a13796f56d0f575a076ffbbe65398a92a refs/tags/rel-2-0-15-1
+79209da7f7c72727f164f4a65c598031a8f9bf20 refs/tags/rel-2-0-15
+5dd3d9ac1749c70d9df5d929337a366057bacfe3 refs/tags/rel-2-0-14-2
+4c5eeb2ffca583dec129910f8480032dfd4b6845 refs/tags/rel-2-0-14-1
+29d900e27edd3ae69270c52ce2fd8b5ddf598735 refs/tags/rel-2-0-14
+c48ae3aa3079fe3dca0a2d816b88fec1e2fc9d71 refs/tags/rel-2-0-13-4
+197c8ff0aef5319d552df9a3aa0d6314e8eeaa0e refs/tags/rel-2-0-13-3
+db3f3598631fba6f3731f8889b6c679bcfeaca35 refs/tags/rel-2-0-13-2
+efc82ca821b4dcb3d370cf0238dacd917c491aff refs/tags/rel-2-0-13-1
+a3e57b048a6f5d65263996722bc5c23396de89eb refs/tags/rel-2-0-13
+fc1cbfd870afe03709b1ca8fe12cbc6d03318630 refs/tags/rel-2-0-12
+6ea6fcbeea7d1c805d5b1236948c883b15e32703 refs/tags/rel-2-0-11
+30cad1be8944d95d433bb7309bf12abd4305afd0 refs/tags/rel-2-0-10
+5fccb3809f3b77eeeba5f9e23567787565d58600 refs/tags/rel-2-0-0-1
+47a9abf270ff65e8b4f3cdeb43f7fb2d0817f242 refs/tags/rel-1-0-4
+eb76dc9684b8f82045d7a4144ded78485d41c3c8 refs/tags/rel-1-0-3-2
+51eef9f277e24e9ea169193ce9d75529dc1793bd refs/remotes/origin/rel-2-1-stable
+c48ae3aa3079fe3dca0a2d816b88fec1e2fc9d71 refs/remotes/origin/rel-2-0-stable
+0d87e657439549c60007c7bd070e532cfdf51bd1 refs/remotes/origin/rel-2-0-15-stable
+5dd3d9ac1749c70d9df5d929337a366057bacfe3 refs/remotes/origin/rel-2-0-14-stable
+47a9abf270ff65e8b4f3cdeb43f7fb2d0817f242 refs/remotes/origin/rel-1-0-stable
+1ba7fa46c301dc81a557f5a0ffe315dd0e7df61b refs/remotes/origin/origin
+363a09754976f954d1d0d8576adddea4c5497b14 refs/remotes/origin/master
+17692fd5a13e35a6d3a283fc2334a53ea07f342c refs/remotes/origin/iprutils
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/refs/heads/master new/iprutils/.git/refs/heads/master
--- old/iprutils/.git/refs/heads/master 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/refs/heads/master 2013-07-03 17:59:57.000000000 +0200
@@ -0,0 +1 @@
+363a09754976f954d1d0d8576adddea4c5497b14
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/.git/refs/remotes/origin/HEAD new/iprutils/.git/refs/remotes/origin/HEAD
--- old/iprutils/.git/refs/remotes/origin/HEAD 1970-01-01 01:00:00.000000000 +0100
+++ new/iprutils/.git/refs/remotes/origin/HEAD 2013-07-03 17:59:57.000000000 +0200
@@ -0,0 +1 @@
+ref: refs/remotes/origin/master
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/iprconfig.c new/iprutils/iprconfig.c
--- old/iprutils/iprconfig.c 2012-12-04 22:52:04.000000000 +0100
+++ new/iprutils/iprconfig.c 2013-07-03 17:59:57.000000000 +0200
@@ -2523,6 +2523,17 @@
return 0;
}
+int index_in_page2(struct ipr_encl_status_ctl_pg *ses_data, int slot_id)
+{
+ int i;
+
+ for (i = 1; i < IPR_NUM_DRIVE_ELEM_STATUS_ENTRIES; i++) {
+ if (ses_data->elem_status[i].slot_id == slot_id)
+ return (i - 1);
+ }
+
+ return -1;
+}
/**
* ses_details - get ses details
* @body: data buffer
@@ -2644,6 +2655,8 @@
#define IPR_REMOVE 1
#define IPR_ADD_HOT_SPARE 0
#define IPR_RMV_HOT_SPARE 1
+#define IPR_FMT_JBOD 0
+#define IPR_FMT_RECOVERY 1
/**
* hot_spare_screen - Display choices for working with hot spares.
@@ -3925,6 +3938,11 @@
"SSDs and HDDs can not be mixed in an array.\n"),
ioa->ioa.gen_name);
rc = RC_22_Mixed_Block_Dev_Classes;
+ } else if (status_record->status == IPR_CMD_STATUS_MIXED_LOG_BLK_SIZE) {
+ syslog(LOG_ERR, _("Start parity protect to %s failed. "
+ "non 4K disks and 4K disks can not be mixed in an array.\n"),
+ ioa->ioa.gen_name);
+ rc = RC_91_Mixed_Logical_Blk_Size;
} else {
syslog(LOG_ERR, _("Start parity protect to %s failed. "
@@ -6332,8 +6350,10 @@
if (ipr_device_is_zeroed(&ioa->dev[j]))
continue;
new_block_size = 0;
- } else
- new_block_size = IPR_JBOD_BLOCK_SIZE;
+ } else if (ioa->dev[j].block_dev_class & IPR_BLK_DEV_CLASS_4K)
+ new_block_size = IPR_JBOD_4K_BLOCK_SIZE;
+ else
+ new_block_size = IPR_JBOD_BLOCK_SIZE;
dev_type = IPR_AF_DASD_DEVICE;
@@ -6360,10 +6380,17 @@
if (action_code == IPR_REMOVE && !format_req(&ioa->dev[j]))
continue;
- if (action_code == IPR_REMOVE)
- new_block_size = IPR_JBOD_BLOCK_SIZE;
- else
- new_block_size = ioa->af_block_size;
+ if (action_code == IPR_REMOVE) {
+ if (ioa->support_4k && ioa->dev[j].block_dev_class & IPR_BLK_DEV_CLASS_4K)
+ new_block_size = IPR_JBOD_4K_BLOCK_SIZE;
+ else
+ new_block_size = IPR_JBOD_BLOCK_SIZE;
+ } else {
+ if (ioa->support_4k && ioa->dev[j].block_dev_class & IPR_BLK_DEV_CLASS_4K)
+ new_block_size = IPR_AF_4K_BLOCK_SIZE;
+ else
+ new_block_size = ioa->af_block_size;
+ }
dev_type = IPR_JBOD_DASD_DEVICE;
@@ -7102,13 +7129,22 @@
struct ipr_drive_elem_status *elem_status;
struct ipr_ses_config_pg ses_cfg;
int res_path_len, dev_slot;
- struct ipr_dev *sec_dev;
+ struct ipr_dev *sec_dev, *tmp_dev;
+ char new_sysfs_res_path[IPR_MAX_RES_PATH_LEN];
int rc;
- evaluate_device(dev, dev->ioa, 0);
res_path_len = strlen(dev->res_path_name);
dev_slot = strtoul(dev->res_path_name + (res_path_len - 2), NULL, 16);
+ if (!ipr_read_dev_attr(dev, "resource_path", new_sysfs_res_path))
+ if (strncmp(dev->res_path_name, new_sysfs_res_path, sizeof(dev->res_path_name)))
+ for_each_dev(dev->ioa, tmp_dev)
+ if (!strncmp(tmp_dev->res_path_name, new_sysfs_res_path, sizeof(tmp_dev->res_path_name))) {
+ dev = tmp_dev;
+ break;
+ }
+ evaluate_device(dev, dev->ioa, 0);
+
if (ipr_receive_diagnostics(dev->ses[0], 2, &ses_data, sizeof(ses_data)))
return INVALID_OPTION_STATUS;
if (ipr_receive_diagnostics(dev->ses[0], 1, &ses_cfg, sizeof(ses_cfg)))
@@ -7884,7 +7920,7 @@
struct ipr_ses_config_pg ses_cfg;
struct drive_elem_desc_pg drive_data;
char phy_loc[PHYSICAL_LOCATION_LENGTH + 1];
- int times;
+ int times, index;
for_each_primary_ioa(ioa) {
is_spi = ioa_is_spi(ioa);
@@ -7924,7 +7960,10 @@
scsi_dbg(ses, "%s\n", is_vses ? "Found VSES" : "Found real SES");
for_each_elem_status(elem_status, &ses_data, &ses_cfg) {
- get_drive_phy_loc_with_ses_phy_loc(ses, &drive_data, elem_status->slot_id, phy_loc, 1);
+ index = index_in_page2(&ses_data, elem_status->slot_id);
+ if (index != -1)
+ get_drive_phy_loc_with_ses_phy_loc(ses, &drive_data, index, phy_loc, 0);
+
if (elem_status->status == IPR_DRIVE_ELEM_STATUS_UNSUPP)
continue;
if (elem_status->status == IPR_DRIVE_ELEM_STATUS_NO_ACCESS)
@@ -8612,7 +8651,8 @@
ipr_disable_qerr(cur_dev_init->dev);
- if (cur_dev_init->new_block_size == IPR_JBOD_BLOCK_SIZE) {
+ if (cur_dev_init->new_block_size == IPR_JBOD_BLOCK_SIZE ||
+ cur_dev_init->new_block_size == IPR_JBOD_4K_BLOCK_SIZE) {
/* Issue mode select to change block size */
mode_parm_hdr = (struct ipr_mode_parm_hdr *)ioctl_buffer;
memset(ioctl_buffer, 0, 255);
@@ -8622,8 +8662,8 @@
/* Setup block size */
block_desc->block_length[0] = 0x00;
- block_desc->block_length[1] = IPR_JBOD_BLOCK_SIZE >> 8;
- block_desc->block_length[2] = IPR_JBOD_BLOCK_SIZE & 0xff;
+ block_desc->block_length[1] = cur_dev_init->new_block_size >> 8;
+ block_desc->block_length[2] = cur_dev_init->new_block_size & 0xff;
rc = ipr_mode_select(cur_dev_init->dev,ioctl_buffer,
sizeof(struct ipr_block_desc) +
@@ -8684,8 +8724,8 @@
block_desc->block_length[2] = ioa->af_block_size & 0xff;
} else {
block_desc->block_length[0] = 0x00;
- block_desc->block_length[1] = IPR_JBOD_BLOCK_SIZE >> 8;
- block_desc->block_length[2] = IPR_JBOD_BLOCK_SIZE & 0xff;
+ block_desc->block_length[1] = cur_dev_init->new_block_size >> 8;
+ block_desc->block_length[2] = cur_dev_init->new_block_size & 0xff;
}
length = sizeof(struct ipr_block_desc) +
@@ -12118,6 +12158,7 @@
struct ipr_query_res_state res_state;
int status, rc;
int format_req = 0;
+ int blk_size = 0;
struct ipr_mode_pages mode_pages;
struct ipr_block_desc *block_desc;
struct sense_data_t sense_data;
@@ -12201,9 +12242,12 @@
if (!status) {
if (mode_pages.hdr.block_desc_len > 0) {
block_desc = (struct ipr_block_desc *)(mode_pages.data);
+ blk_size = block_desc->block_length[2] +
+ (block_desc->block_length[1] << 8) +
+ (block_desc->block_length[0] << 16);
- if ((block_desc->block_length[1] != 0x02) ||
- (block_desc->block_length[2] != 0x00))
+ if ((blk_size != IPR_JBOD_BLOCK_SIZE) &&
+ (blk_size != IPR_JBOD_4K_BLOCK_SIZE))
format_req = 1;
}
}
@@ -12605,6 +12649,7 @@
char vendor_id[IPR_VENDOR_ID_LEN + 1];
char product_id[IPR_PROD_ID_LEN + 1];
struct ipr_ioa *ioa = dev->ioa, *ioa_phy_loc;
+ bool is4k = false;
/* In cases where we're having problems with the device */
if (!ioa)
@@ -12813,8 +12858,13 @@
if (vpd) {
if (scsi_dev_data) {
+ if (dev->qac_entry && ipr_is_device_record(dev->qac_entry->record_id)) {
+ ipr_strncpy_0(vendor_id, (char *)dev->vendor_id, IPR_VENDOR_ID_LEN);
+ ipr_strncpy_0(product_id, (char *)dev->product_id, IPR_PROD_ID_LEN);
+ } else {
ipr_strncpy_0(vendor_id, scsi_dev_data->vendor_id, IPR_VENDOR_ID_LEN);
ipr_strncpy_0(product_id, scsi_dev_data->product_id, IPR_PROD_ID_LEN);
+ }
} else if (dev->qac_entry) {
if (ipr_is_device_record(dev->qac_entry->record_id)) {
ipr_strncpy_0(vendor_id, (char *)dev->vendor_id, IPR_VENDOR_ID_LEN);
@@ -12834,41 +12884,51 @@
}
} else {
- if (ipr_is_hot_spare(dev))
- if (dev->block_dev_class == IPR_SSD)
- len += sprintf(body + len, "%-25s ", "SSD Hot Spare");
+ if (ioa->support_4k && dev->block_dev_class & IPR_BLK_DEV_CLASS_4K)
+ is4k = true;
+ else
+ is4k = false;
+
+ if (ipr_is_hot_spare(dev)) {
+ if (dev->block_dev_class & IPR_SSD)
+ sprintf(buf, "%s%s", is4k ? "4K " : "", "SSD Hot Spare");
else
- len += sprintf(body + len, "%-25s ", "Hot Spare");
- else if (ipr_is_volume_set(dev) || ipr_is_array(dev)) {
- if (dev->block_dev_class == IPR_SSD)
- sprintf(buf, "RAID %s SSD Disk Array",
- get_prot_level_str(ioa->supported_arrays, dev->raid_level));
+ sprintf(buf, "%s%s", is4k ? "4K " : "", "Hot Spare");
+ len += sprintf(body + len, "%-25s ", buf);
+ } else if (ipr_is_volume_set(dev) || ipr_is_array(dev)) {
+ if (dev->block_dev_class & IPR_SSD)
+ sprintf(buf, "RAID %s %s SSD Disk Array",
+ get_prot_level_str(ioa->supported_arrays, dev->raid_level),
+ is4k ? "4K" : "");
else
- sprintf(buf, "RAID %s Disk Array",
- get_prot_level_str(ioa->supported_arrays, dev->raid_level));
+ sprintf(buf, "RAID %s %s Disk Array",
+ get_prot_level_str(ioa->supported_arrays, dev->raid_level),
+ is4k ? "4K" : "");
len += sprintf(body + len, "%-25s ", buf);
} else if (ipr_is_array_member(dev)) {
if (indent)
- if (dev->block_dev_class == IPR_SSD)
- sprintf(raid_str," RAID %s SSD Member",
- dev->prot_level_str);
+ if (dev->block_dev_class & IPR_SSD)
+ sprintf(raid_str," RAID %s %s SSD Member",
+ dev->prot_level_str, is4k ? "4K" : "");
else
- sprintf(raid_str," RAID %s Array Member",
- dev->prot_level_str);
+ sprintf(raid_str," RAID %s %s Array Member",
+ dev->prot_level_str, is4k ? "4K" : "");
else
- if (dev->block_dev_class == IPR_SSD)
- sprintf(raid_str,"RAID %s SSD Member",
- dev->prot_level_str);
+ if (dev->block_dev_class & IPR_SSD)
+ sprintf(raid_str,"RAID %s %sSSD Member",
+ dev->prot_level_str, is4k ? "4K" : "");
else
- sprintf(raid_str,"RAID %s Array Member",
- dev->prot_level_str);
+ sprintf(raid_str,"RAID %s %s Array Member",
+ dev->prot_level_str, is4k ? "4K" : "");
len += sprintf(body + len, "%-25s ", raid_str);
} else if (ipr_is_af_dasd_device(dev))
- if (dev->block_dev_class == IPR_SSD)
- len += sprintf(body + len, "%-25s ", "Advanced Function SSD");
+ if (dev->block_dev_class & IPR_SSD)
+ len += sprintf(body + len, "%-25s ", is4k ? "Advanced Function 4K SSD" :
+ "Advanced Function SSD");
else
- len += sprintf(body + len, "%-25s ", "Advanced Function Disk");
+ len += sprintf(body + len, "%-25s ", is4k ? "Advanced Function 4K Disk" :
+ "Advanced Function Disk");
else if (scsi_dev_data && scsi_dev_data->type == TYPE_ENCLOSURE) {
if (serial_num == 1)
len += sprintf(body + len, "%-13s ", (char *)&dev->serial_number);
@@ -12885,8 +12945,10 @@
else if (ioa->ioa_dead)
len += sprintf(body + len, "%-25s ", "Unavailable Device");
- else
- len += sprintf(body + len, "%-25s ", "Physical Disk");
+ else {
+ len += sprintf(body + len, "%-25s ",
+ is4k ? "Physical 4K Disk" : "Physical Disk");
+ }
}
}
@@ -13097,9 +13159,9 @@
* Returns:
* 0 if success / non-zero on failure FIXME
**/
-static int format_devices(char **args, int num_args, int blksz)
+static int format_devices(char **args, int num_args, int fmt_flag)
{
- int i, rc;
+ int i, rc, blksz;
struct ipr_dev *dev;
for (i = 0; i < num_args; i++) {
@@ -13108,6 +13170,18 @@
fprintf(stderr, "Invalid device: %s\n", args[i]);
continue;
}
+ if (!dev->ioa->support_4k && dev->block_dev_class & IPR_BLK_DEV_CLASS_4K) {
+ fprintf(stderr, "Invalid device specified: %s. 4K disks not supprted on this adapter", args[i]);
+ continue;
+ }
+
+ if (fmt_flag == IPR_FMT_JBOD ) {
+ if (dev->ioa->support_4k && dev->block_dev_class & IPR_BLK_DEV_CLASS_4K)
+ blksz = IPR_JBOD_4K_BLOCK_SIZE;
+ else
+ blksz = IPR_JBOD_BLOCK_SIZE;
+ } else if (fmt_flag == IPR_FMT_RECOVERY)
+ blksz = 0;
if (!ipr_is_af_dasd_device(dev) && !ipr_is_gscsi(dev))
continue;
@@ -13141,7 +13215,7 @@
**/
static int recovery_format(char **args, int num_args)
{
- return format_devices(args, num_args, 0);
+ return format_devices(args, num_args, IPR_FMT_RECOVERY);
}
/**
@@ -13154,7 +13228,7 @@
**/
static int format_for_jbod(char **args, int num_args)
{
- return format_devices(args, num_args, IPR_JBOD_BLOCK_SIZE);
+ return format_devices(args, num_args, IPR_FMT_JBOD);
}
/**
@@ -13167,7 +13241,7 @@
**/
static int format_for_raid(char **args, int num_args)
{
- int i, rc;
+ int i, rc, blk_size;
struct ipr_dev *dev;
for (i = 0; i < num_args; i++) {
@@ -13177,7 +13251,17 @@
return -EINVAL;
}
- add_format_device(dev, dev->ioa->af_block_size);
+ if (!dev->ioa->support_4k && dev->block_dev_class & IPR_BLK_DEV_CLASS_4K) {
+ fprintf(stderr, "Invalid device specified: %s. 4K disks not supprted on this adapter", args[i]);
+ return -EINVAL;
+ }
+
+ if (dev->ioa->support_4k && dev->block_dev_class & IPR_BLK_DEV_CLASS_4K)
+ blk_size = IPR_AF_4K_BLOCK_SIZE;
+ else
+ blk_size = dev->ioa->af_block_size;
+
+ add_format_device(dev, blk_size);
dev_init_tail->do_init = 1;
}
@@ -13197,7 +13281,7 @@
static int raid_create(char **args, int num_args)
{
int i, num_devs = 0, rc;
- int hdd_count = 0, ssd_count = 0;
+ int hdd_count = 0, ssd_count = 0, non_4k_count = 0, is_4k_count = 0;
int next_raid_level, next_stripe_size, next_qdepth;
char *raid_level = IPR_DEFAULT_RAID_LVL;
int stripe_size, qdepth, zeroed_devs;
@@ -13255,10 +13339,15 @@
return -EINVAL;
}
- if (dev->block_dev_class == IPR_SSD)
+ if (dev->block_dev_class & IPR_SSD)
ssd_count++;
else
hdd_count++;
+
+ if (dev->block_dev_class & IPR_BLK_DEV_CLASS_4K)
+ is_4k_count++;
+ else
+ non_4k_count++;
}
if (hdd_count > 0 && ssd_count > 0) {
@@ -13266,6 +13355,11 @@
return -EINVAL;
}
+ if (is_4k_count > 0 && non_4k_count > 0) {
+ syslog(LOG_ERR, _("4K disks and 5XX disks can not be mixed in an array.\n"));
+ return -EINVAL;
+ }
+
if (!ioa) {
syslog(LOG_ERR, _("No valid devices specified.\n"));
return -EINVAL;
@@ -16557,7 +16651,7 @@
int ses_bus, scsi_id_found, is_spi, is_vses;
struct drive_elem_desc_pg drive_data;
char phy_loc[PHYSICAL_LOCATION_LENGTH + 1];
- int times;
+ int times, index;
for_each_ioa(ioa) {
is_spi = ioa_is_spi(ioa);
@@ -16597,7 +16691,10 @@
scsi_dbg(ses, "%s\n", is_vses ? "Found VSES" : "Found real SES");
for_each_elem_status(elem_status, &ses_data, &ses_cfg) {
- get_drive_phy_loc_with_ses_phy_loc(ses, &drive_data, elem_status->slot_id, phy_loc, 0);
+ index = index_in_page2(&ses_data, elem_status->slot_id);
+ if (index != -1)
+ get_drive_phy_loc_with_ses_phy_loc(ses, &drive_data, index, phy_loc, 0);
+
if (elem_status->status == IPR_DRIVE_ELEM_STATUS_UNSUPP)
continue;
if (elem_status->status == IPR_DRIVE_ELEM_STATUS_NO_ACCESS)
@@ -16941,7 +17038,7 @@
rc = ipr_suspend_device_bus(ses, &ses->res_addr[0],
IPR_SDB_CHECK_AND_QUIESCE_ENC);
if (rc !=0 )
- suspend_rc = 82;
+ suspend_rc = RC_82_Suspended_Fail;
else
rc = ipr_write_dev_attr(ses, "state", "offline\n");
}
@@ -16950,7 +17047,7 @@
if (suspend_rc != RC_SUCCESS)
return suspend_rc | EXIT_FLAG;
- return 81 | EXIT_FLAG;
+ return RC_81_Suspended_Success | EXIT_FLAG;
}
int ipr_resume_disk_enclosure(i_container *i_con)
@@ -16966,7 +17063,7 @@
if (ses->is_resume_cand) {
rc = ipr_resume_device_bus(ses, &ses->res_addr[0]);
if (rc !=0 )
- resume_rc = 86;
+ resume_rc = RC_86_Enclosure_Resume_Fail;
else
ipr_write_dev_attr(ses, "state", "running\n");
}
@@ -16975,7 +17072,7 @@
if (resume_rc != RC_SUCCESS)
return resume_rc | EXIT_FLAG;
- return 85 | EXIT_FLAG;
+ return RC_85_Enclosure_Resume_Success | EXIT_FLAG;
}
/**
@@ -17092,28 +17189,28 @@
if (strcmp(input, "3") == 0) {
if (ses->scsi_dev_data && ses->scsi_dev_data->type == IPR_TYPE_ADAPTER && ses == &ses->ioa->ioa)
- return 89;
+ return RC_89_Invalid_Dev_For_Resume;
if (ses->active_suspend == IOA_DEV_PORT_UNKNOWN)
- return 90;
+ return RC_90_Enclosure_Is_Unknown;
if (ses->active_suspend == IOA_DEV_PORT_ACTIVE)
- return 84;
+ return RC_84_Enclosure_Is_Active;
ses->is_resume_cand = 1;
resume_flag = 1;
} else if (strcmp(input, "2") == 0) {
if (ses->scsi_dev_data && ses->scsi_dev_data->type == IPR_TYPE_ADAPTER && ses == &ses->ioa->ioa)
- return 88;
+ return RC_88_Invalid_Dev_For_Suspend;
if (ses->active_suspend == IOA_DEV_PORT_UNKNOWN)
- return 90;
+ return RC_90_Enclosure_Is_Unknown;
if (!strncmp((char *)&ses->serial_number, (char *)&ses->ioa->yl_serial_num[0], ESM_SERIAL_NUM_LEN))
- return 87;
+ return RC_87_No_Suspend_Same_Seri_Num;
if (ses->active_suspend == IOA_DEV_PORT_SUSPEND)
- return 83;
+ return RC_83_Enclosure_Is_Suspend;
ses->is_suspend_cand = 1;
suspend_flag = 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/iprconfig.h new/iprutils/iprconfig.h
--- old/iprutils/iprconfig.h 2012-12-04 22:52:06.000000000 +0100
+++ new/iprutils/iprconfig.h 2013-07-03 17:59:57.000000000 +0200
@@ -268,7 +268,7 @@
{raid_stop, "3", __("Delete a disk array")},
{raid_include, "4", __("Add a device to a disk array")},
{af_include, "5", __("Format device for RAID function")},
- {af_remove, "6", __("Format device for JBOD function (512)")},
+ {af_remove, "6", __("Format device for JBOD function")},
{hot_spare_screen, "7", __("Work with hot spares")},
{asym_access, "8", __("Work with asymmetric access")},
{raid_resync, "9", __("Force RAID Consistency Check")},
@@ -1647,6 +1647,7 @@
/* 88 */ __("Incorrect device type specified. Please specify a valid disk enclosure to suspend"),
/* 89 */ __("Incorrect device type specified. Please specify a valid disk enclosure to resume"),
/* 90 */ __("Selected disk enclosure is in Unknown state. Please check your hardware support"),
+ /* 91 */ __("Create disk array failed - can not mix 5XX and 4K disks."),
/* NOTE: 127 maximum limit */
};
@@ -1734,6 +1735,18 @@
RC_78_Too_Few_Disks,
RC_79_Migrate_Prot_Success,
RC_80_Migrate_Prot_Fail,
+ RC_81_Suspended_Success,
+ RC_82_Suspended_Fail,
+ RC_83_Enclosure_Is_Suspend,
+ RC_84_Enclosure_Is_Active,
+ RC_85_Enclosure_Resume_Success,
+ RC_86_Enclosure_Resume_Fail,
+ RC_87_No_Suspend_Same_Seri_Num,
+ RC_88_Invalid_Dev_For_Suspend,
+ RC_89_Invalid_Dev_For_Resume,
+ RC_90_Enclosure_Is_Unknown,
+ RC_91_Mixed_Logical_Blk_Size,
+
/* NOTE: 127 maximum limit */
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/iprlib.c new/iprutils/iprlib.c
--- old/iprutils/iprlib.c 2012-12-04 22:52:08.000000000 +0100
+++ new/iprutils/iprlib.c 2013-07-03 17:59:57.000000000 +0200
@@ -1655,11 +1655,13 @@
new->init_not_allowed = !dev_init_allowed(new);
if (!old->init_not_allowed || new->init_not_allowed)
new->should_init = 0;
- if (new->ioa->is_secondary && !old->ioa->is_secondary &&
- ipr_is_af_dasd_device(new) && new->scsi_dev_data)
+ if (!new->ioa->sis64 && new->ioa->is_secondary &&
+ !old->ioa->is_secondary && ipr_is_af_dasd_device(new) &&
+ new->scsi_dev_data)
new->rescan = 1;
- if (!new->ioa->is_secondary && old->ioa->is_secondary &&
- ipr_is_af_dasd_device(new) && !new->scsi_dev_data)
+ if (!new->ioa->sis64 && !new->ioa->is_secondary &&
+ old->ioa->is_secondary && ipr_is_af_dasd_device(new) &&
+ !new->scsi_dev_data)
new->rescan = 1;
}
@@ -3322,6 +3324,36 @@
}
/**
+ * ipr_check_allow_restart - check the allow_restart flag for a device
+ * @dev: ipr dev struct
+ *
+ * Return value:
+ * none
+ **/
+int ipr_check_allow_restart(struct ipr_dev *dev)
+{
+ struct sysfs_attribute *sysfs_attr;
+ char path[SYSFS_PATH_MAX];
+ int rc;
+
+ sprintf(path, "%s/%s/%s", "/sys/class/scsi_disk",
+ dev->scsi_dev_data->sysfs_device_name, "allow_restart");
+
+ sysfs_attr = sysfs_open_attribute(path);
+ if (!sysfs_attr) {
+ syslog_dbg("Failed to open allow_restart parameter.\n");
+ return -1;
+ }
+
+ sysfs_read_attribute(sysfs_attr);
+ rc = atoi(sysfs_attr->value);
+
+ sysfs_close_attribute(sysfs_attr);
+
+ return rc;
+}
+
+/**
* ipr_allow_restart - set or clear the allow_restart flag for a device
* @dev: ipr dev struct
* @allow: value to set
@@ -3386,7 +3418,7 @@
{
int fd, rc;
u8 cdb[IPR_CCB_CDB_LEN];
- int length = 0;
+ int length = 0, allow_restart = 0;
char *name = dev->gen_name;
if (strlen(dev->dev_name))
@@ -3411,6 +3443,15 @@
sense_data, IPR_INTERNAL_DEV_TIMEOUT);
close(fd);
+
+ if (rc && sense_data->sense_key == NOT_READY &&
+ sense_data->add_sense_code == 0x4 &&
+ sense_data->add_sense_code_qual == 0x2) {
+ allow_restart = ipr_check_allow_restart(dev);
+ if (allow_restart)
+ ipr_start_stop(dev, IPR_START_STOP_START, "Start Unit");
+ }
+
return rc;
}
@@ -4886,7 +4927,7 @@
if (rc < 0)
return 0;
- if (ipr_is_gscsi(dev) && rc != 512)
+ if (ipr_is_gscsi(dev) && (rc != 512 || rc != 4096))
return 1;
return 0;
@@ -5642,6 +5683,7 @@
sprintf(ioa->dual_state, "Primary");
sprintf(ioa->preferred_dual_state, "No Preference");
+ ioa->is_secondary = 0;
if (!ioa->dual_raid_support)
return;
@@ -5651,15 +5693,15 @@
if (rc)
return;
- ioa_entry = (struct ipr_dual_ioa_entry *)
- (((unsigned long)&ioa->ioa_status.cap) + ntohl(ioa->ioa_status.cap.length));
- if (ntohl(ioa->ioa_status.num_entries))
- print_ioa_state(ioa->dual_state, ioa_entry->cur_state);
print_ioa_state(ioa->preferred_dual_state, ioa->ioa_status.cap.preferred_role);
- if (ioa_entry->cur_state == IPR_IOA_STATE_SECONDARY)
- ioa->is_secondary = 1;
- else
- ioa->is_secondary = 0;
+
+ if (ntohl(ioa->ioa_status.num_entries)) {
+ ioa_entry = (struct ipr_dual_ioa_entry *)
+ (((unsigned long)&ioa->ioa_status.cap) + ntohl(ioa->ioa_status.cap.length));
+ print_ioa_state(ioa->dual_state, ioa_entry->cur_state);
+ if (ioa_entry->cur_state == IPR_IOA_STATE_SECONDARY)
+ ioa->is_secondary = 1;
+ }
}
/**
@@ -5721,6 +5763,8 @@
break;
ioa->af_block_size = get_af_block_size(&ioa_cap);
+ ioa->support_4k = ioa_cap.af_4k_support;
+
if (ioa_cap.is_aux_cache)
ioa->is_aux_cache = 1;
if (ioa_cap.can_attach_to_aux_cache && ioa_cap.is_dual_wide)
@@ -6004,6 +6048,36 @@
dprintf("\n");
}
+/**
+ * ipr_get_logical_block_size - check the logical block size
+ * @dev: ipr dev struct
+ *
+ * Return value:
+ * none
+ **/
+int ipr_get_logical_block_size(struct ipr_dev *dev)
+{
+ struct sysfs_attribute *sysfs_attr;
+ char path[SYSFS_PATH_MAX], *first_hyphen;
+ int rc;
+
+ first_hyphen = strchr(dev->dev_name, 's');
+ sprintf(path, "%s/%s/%s", "/sys/block",
+ first_hyphen, "queue/logical_block_size");
+
+ sysfs_attr = sysfs_open_attribute(path);
+ if (!sysfs_attr) {
+ syslog_dbg("Failed to open logical_block_size parameter.\n");
+ return -1;
+ }
+
+ sysfs_read_attribute(sysfs_attr);
+ rc = atoi(sysfs_attr->value);
+
+ sysfs_close_attribute(sysfs_attr);
+
+ return rc;
+}
/**
* check_current_config - populates the ioa configuration data
@@ -6092,6 +6166,10 @@
strcpy(ioa->dev[device_count].gen_name,
scsi_dev_data->gen_name);
+ if (ioa->support_4k && scsi_dev_data->type == TYPE_DISK) {
+ if (ipr_get_logical_block_size(&ioa->dev[device_count]) == IPR_JBOD_4K_BLOCK_SIZE)
+ ioa->dev[device_count].block_dev_class |= IPR_BLK_DEV_CLASS_4K;
+ }
/* find array config data matching resource entry */
k = 0;
for_each_qac_entry(common_record, qac_data) {
@@ -6193,6 +6271,7 @@
if (!dev || !dev->qac_entry)
continue;
+
if (dev->qac_entry->record_id == IPR_RECORD_ID_DEVICE_RECORD) {
dev->vendor_id = dev->dev_rcd->type2.vendor_id;
dev->product_id = dev->dev_rcd->type2.product_id;
@@ -6242,11 +6321,11 @@
for_each_ioa(ioa) {
if (strlen((char *)ioa->yl_serial_num) == 0) {
memset(&di_vpd, 0, sizeof(di_vpd));
- ipr_inquiry(&ioa->ioa, 0x83, &di_vpd, sizeof(di_vpd));
- if (ntohs(di_vpd.add_page_len) > 120) {
+ rc = ipr_inquiry(&ioa->ioa, 0x83, &di_vpd, sizeof(di_vpd));
+ if (!rc && ntohs(di_vpd.add_page_len) > 120) {
pchr = strstr((char *)&di_vpd.dev_identify_contxt[0],"SN");
-
- strncpy((char *)ioa->yl_serial_num, (pchr + 3), YL_SERIAL_NUM_LEN);
+ if (pchr)
+ strncpy((char *)ioa->yl_serial_num, (pchr + 3), YL_SERIAL_NUM_LEN);
}
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/iprlib.h new/iprutils/iprlib.h
--- old/iprutils/iprlib.h 2012-12-04 22:51:59.000000000 +0100
+++ new/iprutils/iprlib.h 2013-07-03 17:59:57.000000000 +0200
@@ -68,6 +68,8 @@
#define IPR_JBOD_BLOCK_SIZE 512
#define IPR_DEFAULT_AF_BLOCK_SIZE 522
+#define IPR_JBOD_4K_BLOCK_SIZE 4096
+#define IPR_AF_4K_BLOCK_SIZE 4224
#define IOCTL_BUFFER_SIZE 512
#define IPR_MAX_NUM_BUSES 4
#define IPR_VENDOR_ID_LEN 8
@@ -218,6 +220,7 @@
#define IPR_HDD 0x0
#define IPR_SSD 0x1
+#define IPR_BLK_DEV_CLASS_4K 0x4
#define IPR_ARRAY_VIRTUAL_BUS 0x1
#define IPR_VSET_VIRTUAL_BUS 0x2
@@ -1383,6 +1386,7 @@
u8 sis64:1;
#define IPR_SIS32 0x00
#define IPR_SIS64 0x01
+ u8 support_4k:1;
enum ipr_tcq_mode tcq_mode;
u16 pci_vendor;
u16 pci_device;
@@ -1390,8 +1394,8 @@
u16 subsystem_device;
u16 hop_count;
#define IPR_NOHOP 0x00
-#define IPR_2BIT_HOP 0x02
-#define IPR_3BIT_HOP 0x03
+#define IPR_2BIT_HOP 0x01
+#define IPR_3BIT_HOP 0x02
char dual_state[16];
char preferred_dual_state[16];
int host_num;
@@ -1688,6 +1692,7 @@
#define IPR_CMD_STATUS_FAILED 4
#define IPR_CMD_STATUS_INSUFF_DATA_MOVED 5
#define IPR_CMD_STATUS_MIXED_BLK_DEV_CLASESS 6
+#define IPR_CMD_STATUS_MIXED_LOG_BLK_SIZE 7
u8 percent_complete;
struct ipr_res_addr failing_dev_res_addr;
@@ -1752,9 +1757,11 @@
u8 gscsi_only_ha:1;
u8 reserved3:4;
- u8 reserved4;
+ u8 reserved4:1;
+ u8 af_4k_support:1;
+ u8 reserved5:6;
- u8 reserved5:3;
+ u8 reserved6:3;
u8 ra_id_encoding:3;
u8 sis_format:2;
#elif defined (__LITTLE_ENDIAN_BITFIELD)
@@ -1769,11 +1776,13 @@
u8 is_aux_cache:1;
u8 can_attach_to_aux_cache:1;
- u8 reserved4;
+ u8 reserved4:6;
+ u8 af_4k_support:1;
+ u8 reserved5:1;
u8 sis_format:2;
u8 ra_id_encoding:3;
- u8 reserved5:3;
+ u8 reserved6:3;
#endif
u16 af_block_size;
u16 af_ext_cap;
@@ -2467,6 +2476,7 @@
int ipr_read_capacity_16(struct ipr_dev *, void *);
int ipr_query_resource_state(struct ipr_dev *, void *);
void ipr_allow_restart(struct ipr_dev *, int);
+int ipr_get_logical_block_size(struct ipr_dev *);
void ipr_set_manage_start_stop(struct ipr_dev *);
int ipr_start_stop_start(struct ipr_dev *);
int ipr_start_stop_stop(struct ipr_dev *);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/spec/iprutils.spec new/iprutils/spec/iprutils.spec
--- old/iprutils/spec/iprutils.spec 2012-12-04 22:52:10.000000000 +0100
+++ new/iprutils/spec/iprutils.spec 2013-07-03 17:59:57.000000000 +0200
@@ -1,6 +1,6 @@
Summary: Utilities for the IBM Power Linux RAID adapters
Name: iprutils
-Version: 2.3.13
+Version: 2.3.15
Release: 1
License: CPL
Group: System Environment/Base
@@ -81,7 +81,15 @@
%{_sysconfdir}/ha.d/resource.d/iprha
%changelog
-* Tue Dec 04 2012 Kleber Sacilotto de Souza 2.3.13
+* Tue Jul 03 2013 Wen Xiong 2.3.15
+- Release 2.3.15
+- Add support for 4K bytes/sector disks in iprutils
+- Release 2.3.14
+- Fixes stale information after hot plug a disk into an array
+- Segmentation fault when removing a disk with hot spare disk
+- Fxied sysfs error when updating microcode
+- Fixes the platform location issue for Tres drawer
+- Fix hop count defines
- Release 2.3.13
- Fixes Platform Location for 32bit adapter.
- Adds support for optical devices.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iprutils/version.mk new/iprutils/version.mk
--- old/iprutils/version.mk 2012-12-04 22:52:10.000000000 +0100
+++ new/iprutils/version.mk 2013-07-03 17:59:57.000000000 +0200
@@ -6,9 +6,9 @@
IPR_MAJOR_RELEASE=2
IPR_MINOR_RELEASE=3
-IPR_FIX_LEVEL=13
+IPR_FIX_LEVEL=15
IPR_RELEASE=1
-IPR_FIX_DATE=(Dec 04, 2012)
+IPR_FIX_DATE=(Jul 03, 2013)
IPR_VERSION_STR=$(IPR_MAJOR_RELEASE).$(IPR_MINOR_RELEASE).$(IPR_FIX_LEVEL) $(IPR_FIX_DATE)
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org