You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: mod.rs
    path of file: ./repos/firecracker/src/vmm/src/io_uring
    
    the code of the file until where you have to start completion: // Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

#![warn(missing_docs)]

#[allow(clippy::undocumented_unsafe_blocks)]
mod bindings;
pub mod operation;
mod probe;
mod queue;
pub mod restriction;

use std::collections::HashSet;
use std::fmt::Debug;
use std::fs::File;
use std::io::Error as IOErr
    
    fn register_files(&mut self, files: Vec<&File>) -> Result<(), IoUringError> {
        if files.is_empty() {
            // No-op.
            return Ok(());
        }

        if (self.registered_fds_count as usize).saturating_add(files.len()) > IORING_MAX_FIXED_FILES
        {
            return Err(IoUringError::RegisterFileLimitExceeded);
        }

        // SAFETY: Safe because values are valid and we check the return value.
        SyscallReturnCode(unsafe {
            libc::syscall(
                libc::SYS_io_uring_register,
                self.fd.as_raw_fd(),
                bindings::IORING_REGISTER_FILES,
                files
                    .iter()
                    .map(|f| f.as_raw_fd())
                    .collect::<Vec<_>>()
                    .as_mut_slice()
                    .as_mut_ptr() as *const _,
                files.len(),
            )
        })
        .into_empty_result()
        .map_err(IoUringError::RegisterFile)?;

        // Safe to truncate since files.len() < IORING_MAX_FIXED_FILES
        self.registered_fds_count += u32::try_from(files.len()).unwrap();
        Ok(())
    }