diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /fs/ntfs/mft.h |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'fs/ntfs/mft.h')
-rw-r--r-- | fs/ntfs/mft.h | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/fs/ntfs/mft.h b/fs/ntfs/mft.h new file mode 100644 index 000000000000..407de2cef1d6 --- /dev/null +++ b/fs/ntfs/mft.h | |||
@@ -0,0 +1,127 @@ | |||
1 | /* | ||
2 | * mft.h - Defines for mft record handling in NTFS Linux kernel driver. | ||
3 | * Part of the Linux-NTFS project. | ||
4 | * | ||
5 | * Copyright (c) 2001-2004 Anton Altaparmakov | ||
6 | * | ||
7 | * This program/include file is free software; you can redistribute it and/or | ||
8 | * modify it under the terms of the GNU General Public License as published | ||
9 | * by the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program/include file is distributed in the hope that it will be | ||
13 | * useful, but WITHOUT ANY WARRANTY; without even the implied warranty | ||
14 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program (in the main directory of the Linux-NTFS | ||
19 | * distribution in the file COPYING); if not, write to the Free Software | ||
20 | * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | |||
23 | #ifndef _LINUX_NTFS_MFT_H | ||
24 | #define _LINUX_NTFS_MFT_H | ||
25 | |||
26 | #include <linux/fs.h> | ||
27 | #include <linux/highmem.h> | ||
28 | #include <linux/pagemap.h> | ||
29 | |||
30 | #include "inode.h" | ||
31 | |||
32 | extern MFT_RECORD *map_mft_record(ntfs_inode *ni); | ||
33 | extern void unmap_mft_record(ntfs_inode *ni); | ||
34 | |||
35 | extern MFT_RECORD *map_extent_mft_record(ntfs_inode *base_ni, MFT_REF mref, | ||
36 | ntfs_inode **ntfs_ino); | ||
37 | |||
38 | static inline void unmap_extent_mft_record(ntfs_inode *ni) | ||
39 | { | ||
40 | unmap_mft_record(ni); | ||
41 | return; | ||
42 | } | ||
43 | |||
44 | #ifdef NTFS_RW | ||
45 | |||
46 | /** | ||
47 | * flush_dcache_mft_record_page - flush_dcache_page() for mft records | ||
48 | * @ni: ntfs inode structure of mft record | ||
49 | * | ||
50 | * Call flush_dcache_page() for the page in which an mft record resides. | ||
51 | * | ||
52 | * This must be called every time an mft record is modified, just after the | ||
53 | * modification. | ||
54 | */ | ||
55 | static inline void flush_dcache_mft_record_page(ntfs_inode *ni) | ||
56 | { | ||
57 | flush_dcache_page(ni->page); | ||
58 | } | ||
59 | |||
60 | extern void __mark_mft_record_dirty(ntfs_inode *ni); | ||
61 | |||
62 | /** | ||
63 | * mark_mft_record_dirty - set the mft record and the page containing it dirty | ||
64 | * @ni: ntfs inode describing the mapped mft record | ||
65 | * | ||
66 | * Set the mapped (extent) mft record of the (base or extent) ntfs inode @ni, | ||
67 | * as well as the page containing the mft record, dirty. Also, mark the base | ||
68 | * vfs inode dirty. This ensures that any changes to the mft record are | ||
69 | * written out to disk. | ||
70 | * | ||
71 | * NOTE: Do not do anything if the mft record is already marked dirty. | ||
72 | */ | ||
73 | static inline void mark_mft_record_dirty(ntfs_inode *ni) | ||
74 | { | ||
75 | if (!NInoTestSetDirty(ni)) | ||
76 | __mark_mft_record_dirty(ni); | ||
77 | } | ||
78 | |||
79 | extern int ntfs_sync_mft_mirror(ntfs_volume *vol, const unsigned long mft_no, | ||
80 | MFT_RECORD *m, int sync); | ||
81 | |||
82 | extern int write_mft_record_nolock(ntfs_inode *ni, MFT_RECORD *m, int sync); | ||
83 | |||
84 | /** | ||
85 | * write_mft_record - write out a mapped (extent) mft record | ||
86 | * @ni: ntfs inode describing the mapped (extent) mft record | ||
87 | * @m: mapped (extent) mft record to write | ||
88 | * @sync: if true, wait for i/o completion | ||
89 | * | ||
90 | * This is just a wrapper for write_mft_record_nolock() (see mft.c), which | ||
91 | * locks the page for the duration of the write. This ensures that there are | ||
92 | * no race conditions between writing the mft record via the dirty inode code | ||
93 | * paths and via the page cache write back code paths or between writing | ||
94 | * neighbouring mft records residing in the same page. | ||
95 | * | ||
96 | * Locking the page also serializes us against ->readpage() if the page is not | ||
97 | * uptodate. | ||
98 | * | ||
99 | * On success, clean the mft record and return 0. On error, leave the mft | ||
100 | * record dirty and return -errno. The caller should call make_bad_inode() on | ||
101 | * the base inode to ensure no more access happens to this inode. We do not do | ||
102 | * it here as the caller may want to finish writing other extent mft records | ||
103 | * first to minimize on-disk metadata inconsistencies. | ||
104 | */ | ||
105 | static inline int write_mft_record(ntfs_inode *ni, MFT_RECORD *m, int sync) | ||
106 | { | ||
107 | struct page *page = ni->page; | ||
108 | int err; | ||
109 | |||
110 | BUG_ON(!page); | ||
111 | lock_page(page); | ||
112 | err = write_mft_record_nolock(ni, m, sync); | ||
113 | unlock_page(page); | ||
114 | return err; | ||
115 | } | ||
116 | |||
117 | extern BOOL ntfs_may_write_mft_record(ntfs_volume *vol, | ||
118 | const unsigned long mft_no, const MFT_RECORD *m, | ||
119 | ntfs_inode **locked_ni); | ||
120 | |||
121 | extern ntfs_inode *ntfs_mft_record_alloc(ntfs_volume *vol, const int mode, | ||
122 | ntfs_inode *base_ni, MFT_RECORD **mrec); | ||
123 | extern int ntfs_extent_mft_record_free(ntfs_inode *ni, MFT_RECORD *m); | ||
124 | |||
125 | #endif /* NTFS_RW */ | ||
126 | |||
127 | #endif /* _LINUX_NTFS_MFT_H */ | ||