Changeset 793

Show
Ignore:
Timestamp:
07/13/08 20:49:03 (5 months ago)
Author:
mwhitworth
Message:

Handle unmounting better.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • Whitix/branches/fs/fs/vfs/super.c

    r701 r793  
    166166        superBlock->parent=mountNode->superBlock; 
    167167        mountNode->mountNode=superBlock->mount; 
    168         ++mountNode->refs; 
    169168        superBlock->mount->refs+=2; 
    170169 
     
    240239        struct VNode* vNode; 
    241240 
    242         ListForEachEntry(vNode,&superBlock->vNodeList,next) 
     241        ListForEachEntry(vNode, &superBlock->vNodeList, next) 
     242        { 
    243243                /* Only the superblock's 'root' is allowed to have a reference */ 
    244244                if (vNode->refs && vNode != superBlock->mount) 
    245245                        return -EBUSY; 
     246        } 
    246247 
    247248        return 0; 
     
    278279 
    279280        coveredNode->mountNode=NULL; 
     281         
    280282        VNodeRelease(coveredNode); 
    281  
     283        VNodeRelease(coveredNode); /* Reference from the mount node needs to be freed. */ 
     284         
    282285        VNodeRelease(superBlock->mount); 
    283286 
     
    417420        or it may have no vNodes except the mount vNode (in it's ReadSuper) */ 
    418421 
    419         if (superBlock->privData) 
     422        if (superBlock->sbOps->freeSuper) 
     423        { 
     424                superBlock->sbOps->freeSuper(superBlock); 
     425        }else if (superBlock->privData) 
    420426                free(superBlock->privData); 
    421427