---
title: FSVolume.KernelOffloadedIOHandler
framework: fskit
role: symbol
role_heading: Protocol
path: fskit/fsvolume/kerneloffloadediohandler
---

# FSVolume.KernelOffloadedIOHandler

Methods and properties implemented by volumes that use kernel-offloaded I/O to achieve higher file transfer performance.

## Declaration

```swift
protocol KernelOffloadedIOHandler : NSObjectProtocol
```

## Overview

Overview A volume that conforms to this protocol supplies file extent mappings to FSKit, which allows file data transfers to take place in the kernel. This approach provides higher-performance data transfer than transferring all file data between the module and kernel, while still allowing the file system to run in user space. This protocol uses extents to provide the kernel the logical-to-physical mapping of a given file. An extent describes a physical offset on disk, and a length and a logical offset within the file. You don’t manage extents directly. Instead, FSKit provides you with an FSExtentPacker to define and pack the extents in your implementations of this protocol’s methods. Most volumes conform to either this protocol or FSVolume.ReadWriteHandler. You can conform to both if you need to provide kernel-offloaded I/O only for certain files. In that case, files with the inhibitKernelOffloadedIO attribute set use FSVolume.ReadWriteHandler, and those without it use this protocol. A volume that doesn’t conform to either protocol can’t support any file I/O operation. important: This protocol replaces the FSVolumeKernelOffloadedIOOperations protocol. It exposes the same functionality, while using FSVolumeHandlerResult objects. These objects add the ability to reply with FSItem.Attributes and free space from the relevant methods.

## Topics

### Performing mapped I/O

- [blockmapFile(_:offset:length:flags:operationID:packer:replyHandler:)](fskit/fsvolume/kerneloffloadediohandler/blockmapfile(_:offset:length:flags:operationid:packer:replyhandler:).md)
- [FSBlockmapFlags](fskit/fsblockmapflags.md)
- [FSBlockmapResult](fskit/fsblockmapresult.md)
- [completeIO(for:offset:length:status:flags:operationID:replyHandler:)](fskit/fsvolume/kerneloffloadediohandler/completeio(for:offset:length:status:flags:operationid:replyhandler:).md)
- [FSCompleteIOFlags](fskit/fscompleteioflags.md)
- [FSCompleteIOResult](fskit/fscompleteioresult.md)

### Working with items

- [createFile(named:in:attributes:packer:context:replyHandler:)](fskit/fsvolume/kerneloffloadediohandler/createfile(named:in:attributes:packer:context:replyhandler:).md)
- [FSItem.SetAttributesRequest](fskit/fsitem/setattributesrequest.md)
- [FSCreateFileKOIOResult](fskit/fscreatefilekoioresult.md)
- [lookupItem(named:in:packer:context:replyHandler:)](fskit/fsvolume/kerneloffloadediohandler/lookupitem(named:in:packer:context:replyhandler:).md)
- [FSLookupItemKOIOResult](fskit/fslookupitemkoioresult.md)
- [preallocateSpace(for:at:length:flags:packer:context:replyHandler:)](fskit/fsvolume/kerneloffloadediohandler/preallocatespace(for:at:length:flags:packer:context:replyhandler:).md)
- [FSVolume.PreallocateFlags](fskit/fsvolume/preallocateflags.md)
- [FSPreallocateKOIOResult](fskit/fspreallocatekoioresult.md)

### Mapping file extents

- [FSExtentPacker](fskit/fsextentpacker.md)

## Relationships

### Inherits From

- [NSObjectProtocol](objectivec/nsobjectprotocol.md)

## See Also

### Implementing optional handlers

- [FSVolume.OpenCloseHandler](fskit/fsvolume/openclosehandler.md)
- [FSVolume.ReadWriteHandler](fskit/fsvolume/readwritehandler.md)
- [FSVolume.AccessCheckHandler](fskit/fsvolume/accesscheckhandler.md)
- [FSVolume.RenameHandler](fskit/fsvolume/renamehandler.md)
- [FSVolume.PreallocateHandler](fskit/fsvolume/preallocatehandler.md)
- [FSVolume.XattrHandler](fskit/fsvolume/xattrhandler.md)
- [FSVolume.ItemDeactivationHandler](fskit/fsvolume/itemdeactivationhandler.md)
- [FSVolume.DataCacheHandler](fskit/fsvolume/datacachehandler.md)
- [FSVolume.SeekRegionHandler](fskit/fsvolume/seekregionhandler.md)
