Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) // SPDX-License-Identifier: GPL-2.0-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * usnjrnl.h - NTFS kernel transaction log ($UsnJrnl) handling.  Part of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  *	       Linux-NTFS project.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6)  * Copyright (c) 2005 Anton Altaparmakov
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) #ifdef NTFS_RW
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/fs.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/highmem.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/mm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include "aops.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include "debug.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include "endian.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include "time.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #include "types.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #include "usnjrnl.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #include "volume.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)  * ntfs_stamp_usnjrnl - stamp the transaction log ($UsnJrnl) on an ntfs volume
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)  * @vol:	ntfs volume on which to stamp the transaction log
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)  * Stamp the transaction log ($UsnJrnl) on the ntfs volume @vol and return
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)  * 'true' on success and 'false' on error.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)  * This function assumes that the transaction log has already been loaded and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)  * consistency checked by a call to fs/ntfs/super.c::load_and_init_usnjrnl().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) bool ntfs_stamp_usnjrnl(ntfs_volume *vol)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 	ntfs_debug("Entering.");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 	if (likely(!NVolUsnJrnlStamped(vol))) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 		sle64 stamp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 		struct page *page;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 		USN_HEADER *uh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 		page = ntfs_map_page(vol->usnjrnl_max_ino->i_mapping, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 		if (IS_ERR(page)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 			ntfs_error(vol->sb, "Failed to read from "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 					"$UsnJrnl/$DATA/$Max attribute.");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 			return false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 		uh = (USN_HEADER*)page_address(page);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 		stamp = get_current_ntfs_time();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 		ntfs_debug("Stamping transaction log ($UsnJrnl): old "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 				"journal_id 0x%llx, old lowest_valid_usn "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 				"0x%llx, new journal_id 0x%llx, new "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 				"lowest_valid_usn 0x%llx.",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 				(long long)sle64_to_cpu(uh->journal_id),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 				(long long)sle64_to_cpu(uh->lowest_valid_usn),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 				(long long)sle64_to_cpu(stamp),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 				i_size_read(vol->usnjrnl_j_ino));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 		uh->lowest_valid_usn =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 				cpu_to_sle64(i_size_read(vol->usnjrnl_j_ino));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 		uh->journal_id = stamp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 		flush_dcache_page(page);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 		set_page_dirty(page);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 		ntfs_unmap_page(page);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 		/* Set the flag so we do not have to do it again on remount. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 		NVolSetUsnJrnlStamped(vol);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) 	ntfs_debug("Done.");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 	return true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #endif /* NTFS_RW */