[sheepdog] [PATCH v3 2/3] bs_sheepdog.c: fix segmentation fault caused by deleting logical unit
Hitoshi Mitake
mitake.hitoshi at lab.ntt.co.jp
Thu Oct 17 09:38:33 CEST 2013
This patch removes a bug in bs_exit() of bs_sheepdog.c which caused
segmentation fault.
Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
---
usr/bs_sheepdog.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/usr/bs_sheepdog.c b/usr/bs_sheepdog.c
index 11ddce6..de66d59 100644
--- a/usr/bs_sheepdog.c
+++ b/usr/bs_sheepdog.c
@@ -1233,15 +1233,20 @@ static void bs_sheepdog_exit(struct scsi_lu *lu)
struct sheepdog_access_info *ai =
(struct sheepdog_access_info *)(info + 1);
- struct sheepdog_fd_list *p;
+ struct sheepdog_fd_list *p, *next;
bs_thread_close(info);
- list_for_each_entry(p, &ai->fd_list_head, list) {
+ list_for_each_entry_safe(p, next, &ai->fd_list_head, list) {
close(p->fd);
list_del(&p->list);
free(p);
}
+
+ pthread_rwlock_destroy(&ai->fd_list_lock);
+ pthread_rwlock_destroy(&ai->inode_lock);
+
+ dprintf("cleaned logical unit %p safely\n", lu);
}
static struct backingstore_template sheepdog_bst = {
--
1.7.10.4
More information about the sheepdog
mailing list