mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 19:00:25 +00:00
![Thomas Gleixner](/assets/img/avatar_default.png)
Based on 1 normalized pattern(s): this program include file is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version this program include file is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program in the main directory of the linux [ntfs] distribution in the file copying if not write to the free software foundation inc 59 temple place suite 330 boston ma 02111 1307 usa extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 43 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Richard Fontana <rfontana@redhat.com> Reviewed-by: Allison Randal <allison@lohutok.net> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190520075212.517001706@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
88 lines
2.6 KiB
C
88 lines
2.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* runlist.h - Defines for runlist handling in NTFS Linux kernel driver.
|
|
* Part of the Linux-NTFS project.
|
|
*
|
|
* Copyright (c) 2001-2005 Anton Altaparmakov
|
|
* Copyright (c) 2002 Richard Russon
|
|
*/
|
|
|
|
#ifndef _LINUX_NTFS_RUNLIST_H
|
|
#define _LINUX_NTFS_RUNLIST_H
|
|
|
|
#include "types.h"
|
|
#include "layout.h"
|
|
#include "volume.h"
|
|
|
|
/**
|
|
* runlist_element - in memory vcn to lcn mapping array element
|
|
* @vcn: starting vcn of the current array element
|
|
* @lcn: starting lcn of the current array element
|
|
* @length: length in clusters of the current array element
|
|
*
|
|
* The last vcn (in fact the last vcn + 1) is reached when length == 0.
|
|
*
|
|
* When lcn == -1 this means that the count vcns starting at vcn are not
|
|
* physically allocated (i.e. this is a hole / data is sparse).
|
|
*/
|
|
typedef struct { /* In memory vcn to lcn mapping structure element. */
|
|
VCN vcn; /* vcn = Starting virtual cluster number. */
|
|
LCN lcn; /* lcn = Starting logical cluster number. */
|
|
s64 length; /* Run length in clusters. */
|
|
} runlist_element;
|
|
|
|
/**
|
|
* runlist - in memory vcn to lcn mapping array including a read/write lock
|
|
* @rl: pointer to an array of runlist elements
|
|
* @lock: read/write spinlock for serializing access to @rl
|
|
*
|
|
*/
|
|
typedef struct {
|
|
runlist_element *rl;
|
|
struct rw_semaphore lock;
|
|
} runlist;
|
|
|
|
static inline void ntfs_init_runlist(runlist *rl)
|
|
{
|
|
rl->rl = NULL;
|
|
init_rwsem(&rl->lock);
|
|
}
|
|
|
|
typedef enum {
|
|
LCN_HOLE = -1, /* Keep this as highest value or die! */
|
|
LCN_RL_NOT_MAPPED = -2,
|
|
LCN_ENOENT = -3,
|
|
LCN_ENOMEM = -4,
|
|
LCN_EIO = -5,
|
|
} LCN_SPECIAL_VALUES;
|
|
|
|
extern runlist_element *ntfs_runlists_merge(runlist_element *drl,
|
|
runlist_element *srl);
|
|
|
|
extern runlist_element *ntfs_mapping_pairs_decompress(const ntfs_volume *vol,
|
|
const ATTR_RECORD *attr, runlist_element *old_rl);
|
|
|
|
extern LCN ntfs_rl_vcn_to_lcn(const runlist_element *rl, const VCN vcn);
|
|
|
|
#ifdef NTFS_RW
|
|
|
|
extern runlist_element *ntfs_rl_find_vcn_nolock(runlist_element *rl,
|
|
const VCN vcn);
|
|
|
|
extern int ntfs_get_size_for_mapping_pairs(const ntfs_volume *vol,
|
|
const runlist_element *rl, const VCN first_vcn,
|
|
const VCN last_vcn);
|
|
|
|
extern int ntfs_mapping_pairs_build(const ntfs_volume *vol, s8 *dst,
|
|
const int dst_len, const runlist_element *rl,
|
|
const VCN first_vcn, const VCN last_vcn, VCN *const stop_vcn);
|
|
|
|
extern int ntfs_rl_truncate_nolock(const ntfs_volume *vol,
|
|
runlist *const runlist, const s64 new_length);
|
|
|
|
int ntfs_rl_punch_nolock(const ntfs_volume *vol, runlist *const runlist,
|
|
const VCN start, const s64 length);
|
|
|
|
#endif /* NTFS_RW */
|
|
|
|
#endif /* _LINUX_NTFS_RUNLIST_H */
|