Fix #1
Problem: A problem occurs when a DFS file size is increased and the newly acquired block was recovered from a recently deleted file still being represented in the NetWare disk cache and is marked as dirty (or needs to be written to disk), and the cache block is written to by DFS before the cache subsystem performs it's periodic update. The effect is that if the newly expanded DFS file area is written to and then read back, the read data will not match the written data.
Detail: Opening a file in DFS mode evacuates that file from NetWare cache. New disk blocks are acquired as the DFS file size is increased. New disk blocks are acquired from a list of free blocks. The disk blocks on the free block list either never been assigned to any file, or they are recovered from deleted files. Blocks from recently deleted files may still be represented in cache.
Solution : This has been fixed by having DFS verify that newly acquired blocks, obtained while expanding a file, are evacuated from the NetWare disk cache.
Fix #2
Problem: A problem occurs when a DFS file size is increased and written to in a non-sequential mode, causing the formation of a sparse file. The effect is that data previously written to the to the DFS file might be zeroed out by subsequent writes to adjacent blocks.
Detail: It is possible write to a file in DFS mode in a manner that causes the file to become a NetWare sparse file (ether by creating a new file or extending an existing file). As a security measure, the newly acquired disk blocks are zeroed out before use.
Fixed: This problem has been fixed by changing the method of zeroing out the newly acquired disk blocks.
*******************************************************************************
Technology Background:
*****************************************************************************
NetWare Disk Caching Subsystem Description
NetWare's disk caching subsystem technology decreases data access time for frequently accessed disk data. The technology involves storing a representation of disk in the (RAM) memory of the NetWare file server.
When a client reads and writes files that are stored on a NetWare file server, the data does not interface directly with the server's disk storage hardware, it is accessed in the file server's memory cache (RAM). NetWare periodically updates the disk storage hardware as needed.
NetWare Direct File System
The Direct File System (DFS) allows an application to bypass the NetWare Disk Cache and Transaction Tracking Systems. DFS is necessary for some database applications that provide their own caching and transaction tracking facilities.
Backup applications often access large amounts of data not being accessed by other applications. If these accesses are made through the cache, the cache becomes non-relevant for all other accesses, and general server performance suffers from other users.
Some utilities may also require the ability to specify exactly where files are placed, so that volumes can be de-fragmented and optimal file access can be made.
NetWare does not allow a file to be opened in both the cache and DFS modes simultaneously. DFS file open requests can only be made by an NLM application, and fails if the specified file is already open by any other (NLM or NetWare client) entity. While a particular file is opened in
DFS mode, NetWare will deny all other open requests (for both DFS and cache modes) for that file.
Files opened in DFS mode must not have any portion represented in NetWare cache. Therefore, as the file is opened in DFS mode, NetWare searches all cache for blocks that belong to the file. If a cache block belonging to the file being opened is encountered, the cache block content is written to the server's disk storage hardware (if required), and the cache block is disassociated from the file being opened. This process may take considerable time, depending on the size of the
file being opened in DFS mode, and the total number of cache blocks in server RAM.
NetWare Sparse Files
The NetWare file system allows the creation of what Novell calls "sparse files." A sparse file is a file which has "holes" or areas which have not been yet been written to. A sparse file is formed by opening a new file writing to it non-sequentially.
An example of a sparse file is one where the file is opened, and data is written to the file starting at offset 1000 and then closing the file. In this state, the file offsets 1 through 999 have not been written to and represents a hole in the data of the file. If an attempt is made to read from offset 1 through 999, NetWare returns zeros as the data.
NetWare only allocates disk blocks to portions of a sparse file that have been written to. NetWare does not allocate disk blocks to a sparse file's holes.
|