Root/
1 | /* |
2 | * usnjrnl.h - NTFS kernel transaction log ($UsnJrnl) handling. Part of the |
3 | * Linux-NTFS project. |
4 | * |
5 | * Copyright (c) 2005 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 | #ifdef NTFS_RW |
24 | |
25 | #include <linux/fs.h> |
26 | #include <linux/highmem.h> |
27 | #include <linux/mm.h> |
28 | |
29 | #include "aops.h" |
30 | #include "debug.h" |
31 | #include "endian.h" |
32 | #include "time.h" |
33 | #include "types.h" |
34 | #include "usnjrnl.h" |
35 | #include "volume.h" |
36 | |
37 | /** |
38 | * ntfs_stamp_usnjrnl - stamp the transaction log ($UsnJrnl) on an ntfs volume |
39 | * @vol: ntfs volume on which to stamp the transaction log |
40 | * |
41 | * Stamp the transaction log ($UsnJrnl) on the ntfs volume @vol and return |
42 | * 'true' on success and 'false' on error. |
43 | * |
44 | * This function assumes that the transaction log has already been loaded and |
45 | * consistency checked by a call to fs/ntfs/super.c::load_and_init_usnjrnl(). |
46 | */ |
47 | bool ntfs_stamp_usnjrnl(ntfs_volume *vol) |
48 | { |
49 | ntfs_debug("Entering."); |
50 | if (likely(!NVolUsnJrnlStamped(vol))) { |
51 | sle64 stamp; |
52 | struct page *page; |
53 | USN_HEADER *uh; |
54 | |
55 | page = ntfs_map_page(vol->usnjrnl_max_ino->i_mapping, 0); |
56 | if (IS_ERR(page)) { |
57 | ntfs_error(vol->sb, "Failed to read from " |
58 | "$UsnJrnl/$DATA/$Max attribute."); |
59 | return false; |
60 | } |
61 | uh = (USN_HEADER*)page_address(page); |
62 | stamp = get_current_ntfs_time(); |
63 | ntfs_debug("Stamping transaction log ($UsnJrnl): old " |
64 | "journal_id 0x%llx, old lowest_valid_usn " |
65 | "0x%llx, new journal_id 0x%llx, new " |
66 | "lowest_valid_usn 0x%llx.", |
67 | (long long)sle64_to_cpu(uh->journal_id), |
68 | (long long)sle64_to_cpu(uh->lowest_valid_usn), |
69 | (long long)sle64_to_cpu(stamp), |
70 | i_size_read(vol->usnjrnl_j_ino)); |
71 | uh->lowest_valid_usn = |
72 | cpu_to_sle64(i_size_read(vol->usnjrnl_j_ino)); |
73 | uh->journal_id = stamp; |
74 | flush_dcache_page(page); |
75 | set_page_dirty(page); |
76 | ntfs_unmap_page(page); |
77 | /* Set the flag so we do not have to do it again on remount. */ |
78 | NVolSetUsnJrnlStamped(vol); |
79 | } |
80 | ntfs_debug("Done."); |
81 | return true; |
82 | } |
83 | |
84 | #endif /* NTFS_RW */ |
85 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9