fs/ntfs/object_id.c
Source file repositories/reference/linux-study-clean/fs/ntfs/object_id.c
File Facts
- System
- Linux kernel
- Corpus path
fs/ntfs/object_id.c- Extension
.c- Size
- 3881 bytes
- Lines
- 159
- 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.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
ntfs.hindex.hobject_id.h
Detected Declarations
struct object_id_index_keystruct object_id_index_datastruct object_id_indexfunction remove_object_id_indexfunction ntfs_delete_object_id_index
Annotated Snippet
struct object_id_index_key {
union {
u32 alignment;
struct guid guid;
} object_id;
} __packed;
struct object_id_index_data {
__le64 file_id;
struct guid birth_volume_id;
struct guid birth_object_id;
struct guid domain_id;
} __packed;
/* Index entry in $Extend/$ObjId */
struct object_id_index {
struct index_entry_header header;
struct object_id_index_key key;
struct object_id_index_data data;
} __packed;
__le16 objid_index_name[] = {cpu_to_le16('$'), cpu_to_le16('O'), 0};
/*
* open_object_id_index - Open the $Extend/$ObjId file and its index
* @vol: NTFS volume structure
*
* Opens the $ObjId system file and retrieves its index context.
*
* Return: The index context if opened successfully, or NULL if an error
* occurred.
*/
static struct ntfs_index_context *open_object_id_index(struct ntfs_volume *vol)
{
struct inode *dir_vi, *vi;
struct ntfs_inode *dir_ni;
struct ntfs_index_context *xo = NULL;
struct ntfs_name *name = NULL;
u64 mref;
int uname_len;
__le16 *uname;
uname_len = ntfs_nlstoucs(vol, "$ObjId", 6, &uname,
NTFS_MAX_NAME_LEN);
if (uname_len < 0)
return NULL;
/* do not use path_name_to inode - could reopen root */
dir_vi = ntfs_iget(vol->sb, FILE_Extend);
if (IS_ERR(dir_vi)) {
kmem_cache_free(ntfs_name_cache, uname);
return NULL;
}
dir_ni = NTFS_I(dir_vi);
mutex_lock_nested(&dir_ni->mrec_lock, NTFS_EXTEND_MUTEX_PARENT);
mref = ntfs_lookup_inode_by_name(dir_ni, uname, uname_len, &name);
mutex_unlock(&dir_ni->mrec_lock);
kfree(name);
kmem_cache_free(ntfs_name_cache, uname);
if (IS_ERR_MREF(mref))
goto put_dir_vi;
vi = ntfs_iget(vol->sb, MREF(mref));
if (IS_ERR(vi))
goto put_dir_vi;
xo = ntfs_index_ctx_get(NTFS_I(vi), objid_index_name, 2);
if (!xo)
iput(vi);
put_dir_vi:
iput(dir_vi);
return xo;
}
/*
* remove_object_id_index - Remove an object id index entry if attribute present
* @ni: NTFS inode structure containing the attribute
* @xo: Index context for the object id index
*
* Reads the existing object ID attribute and removes it from the index.
*
* Return: 0 on success, or a negative error code on failure.
*/
static int remove_object_id_index(struct ntfs_inode *ni, struct ntfs_index_context *xo)
{
struct object_id_index_key key = {0};
s64 size;
Annotation
- Immediate include surface: `ntfs.h`, `index.h`, `object_id.h`.
- Detected declarations: `struct object_id_index_key`, `struct object_id_index_data`, `struct object_id_index`, `function remove_object_id_index`, `function ntfs_delete_object_id_index`.
- Atlas domain: Core OS / VFS And Filesystem Core.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
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.