View | Details | Raw Unified | Return to bug 114382
Collapse All | Expand All

(-)unh_iscsi_target (-10 / +48 lines)
Lines 137-162 Link Here
137
            continue
137
            continue
138
        fi
138
        fi
139
139
140
        if [ -b "$FILENAME" ] ; then
140
        # resolve one symlink level if needed, e.g. for
141
            dev=`basename "$FILENAME"`
141
        # LVM: /dev/lvg/lvolume-name to /dev/mapper/name
142
            part=$dev
142
        if [ -L "$FILENAME" ] ; then
143
            dev=${dev/[0-9]*/}
143
            REALNAME=$(/usr/bin/readlink "$FILENAME" 2>/dev/null)
144
            [ "$part" == "$dev" ] && part=""
144
            if [ -z "$REALNAME" ] || \
145
            sys="/sys/block/$dev/$part/size"
145
               [ ! -e "$REALNAME" ] || \
146
            BLOCKS=`cat $sys 2>&1` >> ${UNH_ISCSI_LOG}
146
               [ -L "$REALNAME" ] ; then
147
            if [ $? -ne 0 ]; then
147
                unh_log "error in export file: invalid symlink '${FILENAME}'"
148
                unh_log "Failed to query the size of '$FILENAME' block device."
149
                error=1
148
                error=1
150
                break
149
                break
151
            fi
150
            fi
152
        else
151
        else
153
            BLOCKS=`stat --format="%s" "${FILENAME}" 2>&1` >> ${UNH_ISCSI_LOG}
152
            REALNAME=$FILENAME
153
        fi
154
155
        if [ -b "$REALNAME" ] ; then
156
            BLOCKS=""
157
            major=$(printf "%d" 0x$(stat --format="%t" "$REALNAME"))
158
            minor=$(printf "%d" 0x$(stat --format="%T" "$REALNAME"))
159
            case "$major" in
160
                253) # device-mapper / LVM
161
                    for dev in /sys/block/dm-*/dev ; do
162
                        [ "/sys/block/dm-*/dev" == "$dev" ] && continue
163
                        num=$(cat $dev 2>/dev/null)
164
                        if [ "$num" == "${major}:${minor}" ] ; then
165
                            BLOCKS=$(cat ${dev%dev}size 2>> ${UNH_ISCSI_LOG})
166
                            break
167
                        fi
168
                    done
169
                ;;
170
171
                *)   # other (/dev/sdaX, /dev/hda, ...)
172
                    dev=`basename "$REALNAME"`
173
                    part=$dev
174
                    dev=${dev/[0-9]*/}
175
                    [ "$part" == "$dev" ] && part=""
176
                    sys="/sys/block/$dev/$part/size"
177
                    BLOCKS=`cat $sys 2>> ${UNH_ISCSI_LOG}`
178
                ;;
179
            esac
180
181
            if [ -z "$BLOCKS" ] && [ $(($BLOCKS)) -le 0 ]; then
182
                unh_log "Failed to query the size of '$FILENAME' block device."
183
                error=1
184
                break
185
            fi
186
        elif [ -f "$REALNAME" ] ; then
187
            BLOCKS=`stat --format="%s" "${REALNAME}" 2>> ${UNH_ISCSI_LOG}`
154
            if [ $? -ne 0 ]; then
188
            if [ $? -ne 0 ]; then
155
                unh_log "Failed to query size of '$FILENAME' file."
189
                unh_log "Failed to query size of '$FILENAME' file."
156
                error=1
190
                error=1
157
                break
191
                break
158
            fi
192
            fi
159
            BLOCKS=$(( (BLOCKS+511) / 512 ))
193
            BLOCKS=$(( (BLOCKS+511) / 512 ))
194
        else
195
            unh_log "error in export file: '${FILENAME}' is not file or block device"
196
            error=1
197
            break
160
        fi
198
        fi
161
199
162
        unh_log "Exporting target: $TID $LUN $FILENAME $SCRIPT"
200
        unh_log "Exporting target: $TID $LUN $FILENAME $SCRIPT"

Return to bug 114382