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 - [email protected]
+
+- 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://[email protected]/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 
<[email protected]> 1372867197 -0500     clone: from 
ssh://[email protected]/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 
<[email protected]> 1372867197 -0500     clone: from 
ssh://[email protected]/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 <[email protected]> 2.3.13
+* Tue Jul 03 2013 Wen Xiong<wenxionglinux.vnet.ibm.com> 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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to