Skip to content

Commit bf04897

Browse files
author
Sage Weil
committed
Merge pull request ceph#2092 from onlyjob/rbdmap
rbdmap: per-device mount (Closes: ceph#8538) Reviewed-by: Sage Weil <[email protected]>
2 parents 02683ac + b844ec9 commit bf04897

File tree

1 file changed

+47
-27
lines changed

1 file changed

+47
-27
lines changed

src/init-rbdmap

Lines changed: 47 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
# Description: Ceph RBD Mapping
1919
### END INIT INFO
2020

21-
DESC="RBD Mapping"
21+
DESC="RBD Mapping:"
2222
RBDMAPFILE="/etc/ceph/rbdmap"
2323

2424
. /lib/lsb/init-functions
@@ -29,9 +29,7 @@ do_map() {
2929
exit 0
3030
fi
3131

32-
log_daemon_msg "Starting $DESC"
3332
# Read /etc/rbdtab to create non-existant mapping
34-
newrbd=
3533
RET=0
3634
while read DEV PARAMS; do
3735
case "$DEV" in
@@ -44,46 +42,70 @@ do_map() {
4442
DEV=rbd/$DEV
4543
;;
4644
esac
45+
log_action_begin_msg "${DESC} '${DEV}'"
46+
newrbd=""
47+
MAP_RV=""
48+
RET_OP=0
4749
OIFS=$IFS
4850
IFS=','
4951
for PARAM in ${PARAMS[@]}; do
5052
CMDPARAMS="$CMDPARAMS --$(echo $PARAM | tr '=' ' ')"
5153
done
5254
IFS=$OIFS
5355
if [ ! -b /dev/rbd/$DEV ]; then
54-
log_progress_msg $DEV
55-
rbd map $DEV $CMDPARAMS
56-
[ $? -ne "0" ] && RET=1
57-
newrbd="yes"
56+
MAP_RV=$(rbd map $DEV $CMDPARAMS 2>&1)
57+
if [ $? -eq 0 ]; then
58+
newrbd="yes"
59+
else
60+
RET=$((${RET}+$?))
61+
RET_OP=1
62+
fi
63+
fi
64+
log_action_end_msg ${RET_OP} "${MAP_RV}"
65+
66+
if [ "$newrbd" ]; then
67+
## Mount new rbd
68+
MNT_RV=""
69+
mount --fake /dev/rbd/$DEV >>/dev/null 2>&1 \
70+
&& MNT_RV=$(mount -v /dev/rbd/$DEV 2>&1)
71+
[ -n "${MNT_RV}" ] && log_action_msg "mount: ${MNT_RV}"
5872
fi
5973
done < $RBDMAPFILE
60-
log_end_msg $RET
74+
exit ${RET}
6175

62-
# Mount new rbd
63-
if [ "$newrbd" ]; then
64-
log_action_begin_msg "Mounting all filesystems"
65-
mount -a
66-
log_action_end_msg $?
67-
fi
6876
}
6977

7078
do_unmap() {
71-
log_daemon_msg "Stopping $DESC"
7279
RET=0
73-
# Recursive umount that depends /dev/rbd*
74-
MNTDEP=$(findmnt --mtab | awk '$2 ~ /^\/dev\/rbd[0-9]*$/ {print $1}' | sort -r)
75-
for MNT in $MNTDEP; do
76-
umount $MNT
77-
done
78-
# Unmap all rbd device
80+
## Unmount and unmap all rbd devices
7981
if ls /dev/rbd[0-9]* >/dev/null 2>&1; then
8082
for DEV in /dev/rbd[0-9]*; do
81-
log_progress_msg $DEV
82-
rbd unmap $DEV
83-
[ $? -ne "0" ] && RET=1
83+
log_action_begin_msg "RBD un-mapping: '${DEV}'"
84+
UMNT_RV=""
85+
UMAP_RV=""
86+
RET_OP=0
87+
MNT=$(findmnt --mtab --source ${DEV} --noheadings | awk '{print $1'})
88+
if [ -n "${MNT}" ]; then
89+
log_action_cont_msg "un-mounting '${MNT}'"
90+
UMNT_RV=$(umount "${MNT}" 2>&1)
91+
fi
92+
if mountpoint -q "${MNT}"; then
93+
## Un-mounting failed.
94+
RET_OP=1
95+
RET=$((${RET}+1))
96+
else
97+
## Un-mapping.
98+
UMAP_RV=$(rbd unmap $DEV 2>&1)
99+
if [ $? -ne 0 ]; then
100+
RET=$((${RET}+$?))
101+
RET_OP=1
102+
fi
103+
fi
104+
log_action_end_msg ${RET_OP} "${UMAP_RV}"
105+
[ -n "${UMNT_RV}" ] && log_action_msg "${UMNT_RV}"
84106
done
85107
fi
86-
log_end_msg $RET
108+
exit ${RET}
87109
}
88110

89111

@@ -114,5 +136,3 @@ case "$1" in
114136
exit 1
115137
;;
116138
esac
117-
118-
exit 0

0 commit comments

Comments
 (0)