Patent ID: 8140860

Claim:
A file system for managing a storage subsystem's RAID functionality such that files stored in the storage subsystem may have different RAID levels of protection thereby optimizing utilization of storage subsystem's storage units, the storage subsystem comprising a plurality of hard disk drive storage units organized in an array, the file system comprising: a system interface that receives I/O requests from a host system for the storage subsystem; a first write cache that buffers data received by the system interface for a file to be stored by the file system in the storage system; a policy manager that is queried by the file system to determine how a file should be written to the storage system and is configured with block-level rules for determining a RAID level of protection for data of said file wherein the file system is configured as a write anywhere log structured filing system of the storage system and is configured to store data of files having different RAID levels on the same storage unit or set of storage units; a workflow manager that issues commands throughout the file system and that queries the policy manager for rules (among said rules) relating to storing a new file having parameters associated with data of said file and determine whether said file should be protected by a RAID level, and if said file should be protected by a RAID level then determines a particular RAID level for how data of said file should be written to the storage units; a RAID director that implements RAID functionality for said file (based on the determined RAID level) and determines to store data of said file: storage units to use, parity codes to be generated, and the block-level size of write operations to the storage subsystem; a RAID engine that processes data of said file using said parity codes to generate RAID parity data based on the determined RAID level; a second write cache that buffers the received data of said file, block ranges of storage units the received data will be written to, and said information generated by the RAID engine; a space manager that contains storage availability information for each storage block in the storage system and selects block ranges for storing data of said file or for updating a stored file; and an access manager that monitors types of access patterns being made to data of files stored in the storage subsystem and provides the policy manager with access pattern information for data of said stored files thereby allowing the policy manager to improve the storage subsystem's performance, by the access manager determining what: (i) RAID stripe size can be changed to match the log structured filing system's stripe and segment sizes, and be continuously varied to match a size of write commands being received instead of an expected read access pattern, and (ii) write coalescing to re-organize data of said files stored.