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]
