Handle various open failures better
This commit is contained in:
parent
c6fe92715c
commit
8b9b922344
|
@ -527,13 +527,16 @@ lbatviewcache_dtr(struct lbatviewcache* lvc)
|
|||
kfree(lvc->cache);
|
||||
lvc->cache = NULL;
|
||||
lvc->cache_len = 0;
|
||||
INIT_LIST_HEAD(&lvc->cache_head);
|
||||
if (lvc->lpc) {
|
||||
lbatpblkcache_dtr(lvc->lpc);
|
||||
kfree(lvc->lpc);
|
||||
lvc->lpc = NULL;
|
||||
}
|
||||
if (lvc->pc) {
|
||||
pbatcache_dtr(lvc->pc);
|
||||
kfree(lvc->pc);
|
||||
lvc->pc = NULL;
|
||||
}
|
||||
lvc->params = NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -640,6 +640,10 @@ lbdcache_ctr(struct lbdcache* lc,
|
|||
lc->params = &kparams->params;
|
||||
lc->sync = sync;
|
||||
lc->percpu = alloc_percpu(void*);
|
||||
if (!lc->percpu) {
|
||||
printk(KERN_ERR "%s: Out of memory\n", __func__);
|
||||
return false;
|
||||
}
|
||||
for (cpu = 0; cpu < num_online_cpus(); ++cpu) {
|
||||
if (!lbdcache_alloc_compress_state(lc->percpu, lc->params, cpu)) {
|
||||
return false;
|
||||
|
@ -689,14 +693,18 @@ lbdcache_dtr(struct lbdcache* lc)
|
|||
struct lbd* lbd;
|
||||
int cpu;
|
||||
|
||||
if (lc->flush_dwork.work.func) {
|
||||
cancel_delayed_work_sync(&lc->flush_dwork);
|
||||
flush_delayed_work(&lc->flush_dwork);
|
||||
}
|
||||
if (lc->flush_head.next) {
|
||||
list_for_each_entry(lbd, &lc->flush_head, flush_list) {
|
||||
ret = lbd_flush(lbd);
|
||||
if (ret) {
|
||||
printk(KERN_ERR "%s: lbd_flush failed\n", __func__);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (n = 0; n < lc->cache_len; ++n) {
|
||||
lbd = &lc->cache[n];
|
||||
if (!lbd) {
|
||||
|
@ -710,15 +718,18 @@ lbdcache_dtr(struct lbdcache* lc)
|
|||
kfree(lc->cache);
|
||||
lc->cache = NULL;
|
||||
lc->cache_len = 0;
|
||||
INIT_LIST_HEAD(&lc->cache_head);
|
||||
if (lc->lvc) {
|
||||
lbatviewcache_dtr(lc->lvc);
|
||||
kfree(lc->lvc);
|
||||
lc->lvc = NULL;
|
||||
}
|
||||
if (lc->percpu) {
|
||||
for (cpu = 0; cpu < num_online_cpus(); ++cpu) {
|
||||
lbdcache_free_compress_state(lc->percpu, lc->params, cpu);
|
||||
}
|
||||
free_percpu(lc->percpu);
|
||||
lc->percpu = NULL;
|
||||
}
|
||||
lc->params = NULL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue