This patch removes a bug in bs_exit() of bs_sheepdog.c which caused
segmentation fault.

Signed-off-by: Hitoshi Mitake <[email protected]>
---
 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

-- 
sheepdog mailing list
[email protected]
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to