- for (( i=0, j=21; i < ${lmm[8]}; i++, j+=4 )); do
- local obdidx=${lmm[$j]}
- local devnum=$((obdidx + 1))
- local objid=${lmm[$((j+1))]}
- local group=${lmm[$((j+3))]}
- local dev=$(ostdevname $devnum)
- local dir=$(facet_mntpt ost$devnum)
-
- stop ost$devnum
- do_facet ost$devnum mount -t $FSTYPE $dev $dir $OST_MOUNT_OPTS ||
- { error "mounting $dev as $FSTYPE failed"; return 3; }
-
- obj_filename=$(do_facet ost$devnum find $dir/O/$group -name $objid)
- local ff=$(do_facet ost$devnum $LL_DECODE_FILTER_FID $obj_filename)
- IFS=$'/= [:]'
- ff=($(echo $ff))
- IFS="$old_ifs"
+ local have_obdidx=false
+ local stripe_nr=0
+ $GETSTRIPE $1 | while read obdidx oid hex seq; do
+ # skip lines up to and including "obdidx"
+ [ -z "$obdidx" ] && break
+ [ "$obdidx" = "obdidx" ] && have_obdidx=true && continue
+ $have_obdidx || continue
+
+ local ost=$((obdidx + 1))
+ local dev=$(ostdevname $ost)
+
+ log "want: stripe:$stripe_nr ost:$obdidx oid:$oid/$hex seq:$seq"
+
+ #don't unmount/remount the OSTs if we don't need to do that
+ #local dir=$(facet_mntpt ost$ost)
+ #stop ost$dev
+ #do_facet ost$dev mount -t $FSTYPE $dev $dir $OST_MOUNT_OPTS ||
+ # { error "mounting $dev as $FSTYPE failed"; return 3; }
+ #local obj_file=$(do_facet ost$ost find $dir/O/$seq -name $oid)
+ #local ff=$(do_facet ost$ost $LL_DECODE_FILTER_FID $obj_file)
+
+ local obj_file="O/$seq/d$((oid %32))/$oid"
+ local ff=$(do_facet ost$ost "$DEBUGFS -c -R 'stat $obj_file' \
+ $dev 2>/dev/null" | grep "parent=")
+
+ [ -z "$ff" ] && error "$obj_file: no filter_fid info"
+
+ echo "$ff" | sed -e 's#.*objid=#got: objid=#'
+
+ #do_facet ost$ost umount -d $dir
+ #start ost$ost $dev $OST_MOUNT_OPTS
+
+ # /mnt/O/0/d23/23: objid=23 seq=0 parent=[0x200000400:0x1e:0x1]
+ # fid: objid=23 seq=0 parent=[0x200000400:0x1e:0x0] stripe=1
+ local ff_parent=$(echo $ff|sed -e 's/.*parent=.//')
+ local ff_pseq=$(echo $ff_parent | cut -d: -f1)
+ local ff_poid=$(echo $ff_parent | cut -d: -f2)
+ local ff_pstripe=$(echo $ff_parent | sed -e 's/.*stripe=//')