OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [fs/] [ntfs/] [runlist.h] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
2
 * runlist.h - Defines for runlist handling in NTFS Linux kernel driver.
3
 *             Part of the Linux-NTFS project.
4
 *
5
 * Copyright (c) 2001-2005 Anton Altaparmakov
6
 * Copyright (c) 2002 Richard Russon
7
 *
8
 * This program/include file is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU General Public License as published
10
 * by the Free Software Foundation; either version 2 of the License, or
11
 * (at your option) any later version.
12
 *
13
 * This program/include file is distributed in the hope that it will be
14
 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
15
 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 * GNU General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU General Public License
19
 * along with this program (in the main directory of the Linux-NTFS
20
 * distribution in the file COPYING); if not, write to the Free Software
21
 * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22
 */
23
 
24
#ifndef _LINUX_NTFS_RUNLIST_H
25
#define _LINUX_NTFS_RUNLIST_H
26
 
27
#include "types.h"
28
#include "layout.h"
29
#include "volume.h"
30
 
31
/**
32
 * runlist_element - in memory vcn to lcn mapping array element
33
 * @vcn:        starting vcn of the current array element
34
 * @lcn:        starting lcn of the current array element
35
 * @length:     length in clusters of the current array element
36
 *
37
 * The last vcn (in fact the last vcn + 1) is reached when length == 0.
38
 *
39
 * When lcn == -1 this means that the count vcns starting at vcn are not
40
 * physically allocated (i.e. this is a hole / data is sparse).
41
 */
42
typedef struct {        /* In memory vcn to lcn mapping structure element. */
43
        VCN vcn;        /* vcn = Starting virtual cluster number. */
44
        LCN lcn;        /* lcn = Starting logical cluster number. */
45
        s64 length;     /* Run length in clusters. */
46
} runlist_element;
47
 
48
/**
49
 * runlist - in memory vcn to lcn mapping array including a read/write lock
50
 * @rl:         pointer to an array of runlist elements
51
 * @lock:       read/write spinlock for serializing access to @rl
52
 *
53
 */
54
typedef struct {
55
        runlist_element *rl;
56
        struct rw_semaphore lock;
57
} runlist;
58
 
59
static inline void ntfs_init_runlist(runlist *rl)
60
{
61
        rl->rl = NULL;
62
        init_rwsem(&rl->lock);
63
}
64
 
65
typedef enum {
66
        LCN_HOLE                = -1,   /* Keep this as highest value or die! */
67
        LCN_RL_NOT_MAPPED       = -2,
68
        LCN_ENOENT              = -3,
69
        LCN_ENOMEM              = -4,
70
        LCN_EIO                 = -5,
71
} LCN_SPECIAL_VALUES;
72
 
73
extern runlist_element *ntfs_runlists_merge(runlist_element *drl,
74
                runlist_element *srl);
75
 
76
extern runlist_element *ntfs_mapping_pairs_decompress(const ntfs_volume *vol,
77
                const ATTR_RECORD *attr, runlist_element *old_rl);
78
 
79
extern LCN ntfs_rl_vcn_to_lcn(const runlist_element *rl, const VCN vcn);
80
 
81
#ifdef NTFS_RW
82
 
83
extern runlist_element *ntfs_rl_find_vcn_nolock(runlist_element *rl,
84
                const VCN vcn);
85
 
86
extern int ntfs_get_size_for_mapping_pairs(const ntfs_volume *vol,
87
                const runlist_element *rl, const VCN first_vcn,
88
                const VCN last_vcn);
89
 
90
extern int ntfs_mapping_pairs_build(const ntfs_volume *vol, s8 *dst,
91
                const int dst_len, const runlist_element *rl,
92
                const VCN first_vcn, const VCN last_vcn, VCN *const stop_vcn);
93
 
94
extern int ntfs_rl_truncate_nolock(const ntfs_volume *vol,
95
                runlist *const runlist, const s64 new_length);
96
 
97
int ntfs_rl_punch_nolock(const ntfs_volume *vol, runlist *const runlist,
98
                const VCN start, const s64 length);
99
 
100
#endif /* NTFS_RW */
101
 
102
#endif /* _LINUX_NTFS_RUNLIST_H */

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.