fs/ntfs/logfile.c
Source file repositories/reference/linux-study-clean/fs/ntfs/logfile.c
File Facts
- System
- Linux kernel
- Corpus path
fs/ntfs/logfile.c- Extension
.c- Size
- 25178 bytes
- Lines
- 781
- Domain
- Core OS
- Bucket
- VFS And Filesystem Core
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/blkdev.hattrib.hlogfile.hntfs.h
Detected Declarations
function Copyrightfunction sizefunction le16_to_cpufunction ntfs_check_restart_areafunction le32_to_cpufunction le16_to_cpufunction le16_to_cpufunction le16_to_cpufunction ntfs_check_restart_page_headerfunction ntfs_check_and_load_restart_pagefunction post_read_mst_fixupfunction ntfs_check_logfilefunction ntfs_check_logfile
Annotated Snippet
le16_to_cpu(rp->minor_ver) != 1) {
ntfs_error(vi->i_sb,
"LogFile version %i.%i is not supported. (This driver supports version 1.1 only.)",
(int)le16_to_cpu(rp->major_ver),
(int)le16_to_cpu(rp->minor_ver));
return false;
}
/*
* If chkdsk has been run the restart page may not be protected by an
* update sequence array.
*/
if (ntfs_is_chkd_record(rp->magic) && !le16_to_cpu(rp->usa_count)) {
have_usa = false;
goto skip_usa_checks;
}
/* Verify the size of the update sequence array. */
usa_count = 1 + (logfile_system_page_size >> NTFS_BLOCK_SIZE_BITS);
if (usa_count != le16_to_cpu(rp->usa_count)) {
ntfs_error(vi->i_sb,
"LogFile restart page specifies inconsistent update sequence array count.");
return false;
}
/* Verify the position of the update sequence array. */
usa_ofs = le16_to_cpu(rp->usa_ofs);
usa_end = usa_ofs + usa_count * sizeof(u16);
if (usa_ofs < sizeof(struct restart_page_header) ||
usa_end > NTFS_BLOCK_SIZE - sizeof(u16)) {
ntfs_error(vi->i_sb,
"LogFile restart page specifies inconsistent update sequence array offset.");
return false;
}
skip_usa_checks:
/*
* Verify the position of the restart area. It must be:
* - aligned to 8-byte boundary,
* - after the update sequence array, and
* - within the system page size.
*/
ra_ofs = le16_to_cpu(rp->restart_area_offset);
if (ra_ofs & 7 || (have_usa ? ra_ofs < usa_end :
ra_ofs < sizeof(struct restart_page_header)) ||
ra_ofs > logfile_system_page_size) {
ntfs_error(vi->i_sb,
"LogFile restart page specifies inconsistent restart area offset.");
return false;
}
/*
* Only restart pages modified by chkdsk are allowed to have chkdsk_lsn
* set.
*/
if (!ntfs_is_chkd_record(rp->magic) && le64_to_cpu(rp->chkdsk_lsn)) {
ntfs_error(vi->i_sb,
"LogFile restart page is not modified by chkdsk but a chkdsk LSN is specified.");
return false;
}
ntfs_debug("Done.");
return true;
}
/*
* ntfs_check_restart_area - check the restart area for consistency
* @vi: LogFile inode to which the restart page belongs
* @rp: restart page whose restart area to check
*
* Check the restart area of the restart page @rp for consistency and return
* 'true' if it is consistent and 'false' otherwise.
*
* This function assumes that the restart page header has already been
* consistency checked.
*
* This function only needs NTFS_BLOCK_SIZE bytes in @rp, i.e. it does not
* require the full restart page.
*/
static bool ntfs_check_restart_area(struct inode *vi, struct restart_page_header *rp)
{
u64 file_size;
struct restart_area *ra;
u32 ra_ofs, ra_len, ca_ofs;
u8 fs_bits;
ntfs_debug("Entering.");
ra_ofs = le16_to_cpu(rp->restart_area_offset);
ra = (struct restart_area *)((u8 *)rp + ra_ofs);
/*
* Everything before ra->file_size must be before the first word
* protected by an update sequence number. This ensures that it is
* safe to access ra->client_array_offset.
*/
if (ra_ofs + offsetof(struct restart_area, file_size) >
NTFS_BLOCK_SIZE - sizeof(u16)) {
Annotation
- Immediate include surface: `linux/blkdev.h`, `attrib.h`, `logfile.h`, `ntfs.h`.
- Detected declarations: `function Copyright`, `function size`, `function le16_to_cpu`, `function ntfs_check_restart_area`, `function le32_to_cpu`, `function le16_to_cpu`, `function le16_to_cpu`, `function le16_to_cpu`, `function ntfs_check_restart_page_header`, `function ntfs_check_and_load_restart_page`.
- Atlas domain: Core OS / VFS And Filesystem Core.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.