From dd235af55cf0df0f7d1a35e68da49b54fc1be555 Mon Sep 17 00:00:00 2001 From: Vladislav Bolkhovitin Date: Tue, 14 Jul 2009 16:56:07 +0000 Subject: [PATCH] Fixes possible crash if sgv pools destroyed too early. Reported by Smadar Gonen git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@955 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- scst/src/dev_handlers/scst_user.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scst/src/dev_handlers/scst_user.c b/scst/src/dev_handlers/scst_user.c index 0160a18de..f2d1ac1ab 100644 --- a/scst/src/dev_handlers/scst_user.c +++ b/scst/src/dev_handlers/scst_user.c @@ -3094,8 +3094,8 @@ static int dev_user_release(struct inode *inode, struct file *file) scst_unregister_virtual_device(dev->virt_id); scst_unregister_virtual_dev_driver(&dev->devtype); - sgv_pool_del(dev->pool_clust); - sgv_pool_del(dev->pool); + sgv_pool_flush(dev->pool_clust); + sgv_pool_flush(dev->pool); TRACE_DBG("Unregistering finished (dev %p)", dev); @@ -3106,6 +3106,9 @@ static int dev_user_release(struct inode *inode, struct file *file) wait_for_completion(&dev->cleanup_cmpl); + sgv_pool_del(dev->pool_clust); + sgv_pool_del(dev->pool); + up_write(&dev->dev_rwsem); /* to make the debug check happy */ TRACE_DBG("Releasing completed (dev %p)", dev);