Changeset 855

Show
Ignore:
Timestamp:
08/21/08 21:50:51 (3 years ago)
Author:
mwhitworth
Message:

Update call of blockMap.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • Whitix/trunk/fs/vfs/file.c

    r701 r855  
    4848                return; 
    4949 
    50         vNode->aTime=currTime; 
    51         SetVNodeDirty(vNode); 
     50        /* TODO: Check granularity of vNode times on disk. No point dirtying a vNode if 
     51         * the time isn't updated. */ 
     52 
     53        if (vNode->aTime.seconds < currTime.seconds) 
     54        { 
     55                vNode->aTime=currTime; 
     56                SetVNodeDirty(vNode); 
     57        } 
    5258} 
    5359 
     
    7480                return; 
    7581 
    76         vNode->mTime=currTime; 
    77  
    7882        /* Has the vNode just been created? If so, record its 
    7983        creation time */ 
     
    8185                vNode->cTime=currTime; 
    8286 
    83         SetVNodeDirty(vNode); 
     87        /* See VfsFileAccessed comment. */ 
     88        if (vNode->mTime.seconds < currTime.seconds || create) 
     89        { 
     90                vNode->mTime=currTime; 
     91                SetVNodeDirty(vNode); 
     92        } 
    8493} 
    8594 
     
    123132                readSize=MIN(bytesPerSec-readOffset,size); 
    124133 
    125                 res=file->vNode->vNodeOps->blockMap(vNode,file->position / bytesPerSec); 
     134                res=file->vNode->vNodeOps->blockMap(vNode,file->position / bytesPerSec, 0); 
    126135 
    127136                if (res == -1) 
     
    146155                copyOffset+=readSize; 
    147156                file->position+=readSize; 
     157 
    148158                BlockFree(buff); 
    149159        } 
    150160 
     161#if 0 
    151162        /* Read in the next few sectors, as part of read-ahead */ 
    152163        readOffset=((file->position + bytesPerSec-1) & ~(bytesPerSec-1)); 
    153164        readOffset /= bytesPerSec; 
    154165 
    155         res=file->vNode->vNodeOps->blockMap(vNode, readOffset); 
     166        res=file->vNode->vNodeOps->blockMap(vNode, readOffset, 0); 
    156167 
    157168        if (res > 0) 
     
    159170                BlockReadAhead(vNode->superBlock->sDevice, res); 
    160171 
    161                 res=file->vNode->vNodeOps->blockMap(vNode, readOffset+1); 
     172                res=file->vNode->vNodeOps->blockMap(vNode, readOffset+1, 0); 
    162173 
    163174                if (res > 0) 
    164175                        BlockReadAhead(vNode->superBlock->sDevice, res); 
    165176        } 
     177#endif 
    166178 
    167179        IrqRestoreFlags(flags); 
     
    180192        while (size > 0) 
    181193        { 
    182                 res=file->vNode->vNodeOps->blockMap(file->vNode, file->position/BYTES_PER_SECTOR(file->vNode->superBlock)); 
     194                res=file->vNode->vNodeOps->blockMap(file->vNode, file->position/BYTES_PER_SECTOR(file->vNode->superBlock), VFS_MAP_CREATE); 
    183195 
    184196                /* Could not find block? Deal with this better. */ 
    185                 if (res == -1) 
     197                if (res < 0) 
    186198                        return -EIO; 
    187199 
     
    276288        file->fileOps=file->vNode->fileOps; 
    277289 
    278         if (file->fileOps->open) 
     290        if (file->fileOps && file->fileOps->open) 
    279291        { 
    280292                err=file->fileOps->open(file); 
     
    390402int DoCloseFile(struct File* file) 
    391403{ 
    392         DWORD flags; 
    393  
    394404        if (!file || !file->vNode) 
    395405                return -EFAULT; 
     
    564574                return -EBADF; 
    565575 
    566         if (VirtCheckArea((void*)buffer,amount,VER_WRITE)) 
     576        if (VirtCheckArea((void*)buffer, amount, VER_WRITE)) 
    567577                return -EFAULT; 
     578 
    568579        return DoReadFile(file,buffer,amount); 
    569580}