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
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  *  linux/fs/hpfs/file.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  *  Mikulas Patocka (mikulas@artax.karlin.mff.cuni.cz), 1998-1999
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  *  file VFS functions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #include "hpfs_fn.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #include <linux/mpage.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #include <linux/fiemap.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #define BLOCKS(size) (((size) + 511) >> 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) static int hpfs_file_release(struct inode *inode, struct file *file)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 	hpfs_lock(inode->i_sb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 	hpfs_write_if_changed(inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 	hpfs_unlock(inode->i_sb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 	return 0;
^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) int hpfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 	struct inode *inode = file->f_mapping->host;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	int ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	ret = file_write_and_wait_range(file, start, end);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	if (ret)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 		return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	return sync_blockdev(inode->i_sb->s_bdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36)  * generic_file_read often calls bmap with non-existing sector,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37)  * so we must ignore such errors.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) static secno hpfs_bmap(struct inode *inode, unsigned file_secno, unsigned *n_secs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	struct hpfs_inode_info *hpfs_inode = hpfs_i(inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	unsigned n, disk_secno;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	struct fnode *fnode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	struct buffer_head *bh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	if (BLOCKS(hpfs_i(inode)->mmu_private) <= file_secno) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	n = file_secno - hpfs_inode->i_file_sec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	if (n < hpfs_inode->i_n_secs) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 		*n_secs = hpfs_inode->i_n_secs - n;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 		return hpfs_inode->i_disk_sec + n;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	if (!(fnode = hpfs_map_fnode(inode->i_sb, inode->i_ino, &bh))) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	disk_secno = hpfs_bplus_lookup(inode->i_sb, inode, &fnode->btree, file_secno, bh);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	if (disk_secno == -1) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	if (hpfs_chk_sectors(inode->i_sb, disk_secno, 1, "bmap")) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	n = file_secno - hpfs_inode->i_file_sec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	if (n < hpfs_inode->i_n_secs) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 		*n_secs = hpfs_inode->i_n_secs - n;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 		return hpfs_inode->i_disk_sec + n;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	*n_secs = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	return disk_secno;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) void hpfs_truncate(struct inode *i)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	if (IS_IMMUTABLE(i)) return /*-EPERM*/;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	hpfs_lock_assert(i->i_sb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	hpfs_i(i)->i_n_secs = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	i->i_blocks = 1 + ((i->i_size + 511) >> 9);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	hpfs_i(i)->mmu_private = i->i_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	hpfs_truncate_btree(i->i_sb, i->i_ino, 1, ((i->i_size + 511) >> 9));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	hpfs_write_inode(i);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	hpfs_i(i)->i_n_secs = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) static int hpfs_get_block(struct inode *inode, sector_t iblock, struct buffer_head *bh_result, int create)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	int r;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	secno s;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	unsigned n_secs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	hpfs_lock(inode->i_sb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	s = hpfs_bmap(inode, iblock, &n_secs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	if (s) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 		if (bh_result->b_size >> 9 < n_secs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 			n_secs = bh_result->b_size >> 9;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 		n_secs = hpfs_search_hotfix_map_for_range(inode->i_sb, s, n_secs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 		if (unlikely(!n_secs)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 			s = hpfs_search_hotfix_map(inode->i_sb, s);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 			n_secs = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 		map_bh(bh_result, inode->i_sb, s);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 		bh_result->b_size = n_secs << 9;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 		goto ret_0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	if (!create) goto ret_0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	if (iblock<<9 != hpfs_i(inode)->mmu_private) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 		BUG();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 		r = -EIO;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 		goto ret_r;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	if ((s = hpfs_add_sector_to_btree(inode->i_sb, inode->i_ino, 1, inode->i_blocks - 1)) == -1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 		hpfs_truncate_btree(inode->i_sb, inode->i_ino, 1, inode->i_blocks - 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 		r = -ENOSPC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 		goto ret_r;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	inode->i_blocks++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	hpfs_i(inode)->mmu_private += 512;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	set_buffer_new(bh_result);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	map_bh(bh_result, inode->i_sb, hpfs_search_hotfix_map(inode->i_sb, s));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	ret_0:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	r = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	ret_r:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	hpfs_unlock(inode->i_sb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	return r;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) static int hpfs_readpage(struct file *file, struct page *page)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	return mpage_readpage(page, hpfs_get_block);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) static int hpfs_writepage(struct page *page, struct writeback_control *wbc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	return block_write_full_page(page, hpfs_get_block, wbc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) static void hpfs_readahead(struct readahead_control *rac)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	mpage_readahead(rac, hpfs_get_block);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) static int hpfs_writepages(struct address_space *mapping,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 			   struct writeback_control *wbc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 	return mpage_writepages(mapping, wbc, hpfs_get_block);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) static void hpfs_write_failed(struct address_space *mapping, loff_t to)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	struct inode *inode = mapping->host;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	hpfs_lock(inode->i_sb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 	if (to > inode->i_size) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 		truncate_pagecache(inode, inode->i_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 		hpfs_truncate(inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	hpfs_unlock(inode->i_sb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) static int hpfs_write_begin(struct file *file, struct address_space *mapping,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 			loff_t pos, unsigned len, unsigned flags,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 			struct page **pagep, void **fsdata)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	int ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	*pagep = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 	ret = cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 				hpfs_get_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 				&hpfs_i(mapping->host)->mmu_private);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	if (unlikely(ret))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 		hpfs_write_failed(mapping, pos + len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) static int hpfs_write_end(struct file *file, struct address_space *mapping,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 			loff_t pos, unsigned len, unsigned copied,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 			struct page *pagep, void *fsdata)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	struct inode *inode = mapping->host;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	err = generic_write_end(file, mapping, pos, len, copied, pagep, fsdata);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	if (err < len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 		hpfs_write_failed(mapping, pos + len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 	if (!(err < 0)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 		/* make sure we write it on close, if not earlier */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 		hpfs_lock(inode->i_sb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 		hpfs_i(inode)->i_dirty = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 		hpfs_unlock(inode->i_sb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 	return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) static sector_t _hpfs_bmap(struct address_space *mapping, sector_t block)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 	return generic_block_bmap(mapping, block, hpfs_get_block);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) static int hpfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, u64 start, u64 len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	return generic_block_fiemap(inode, fieinfo, start, len, hpfs_get_block);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) const struct address_space_operations hpfs_aops = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	.readpage = hpfs_readpage,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	.writepage = hpfs_writepage,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	.readahead = hpfs_readahead,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	.writepages = hpfs_writepages,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	.write_begin = hpfs_write_begin,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 	.write_end = hpfs_write_end,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	.bmap = _hpfs_bmap
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) const struct file_operations hpfs_file_ops =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 	.llseek		= generic_file_llseek,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 	.read_iter	= generic_file_read_iter,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 	.write_iter	= generic_file_write_iter,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	.mmap		= generic_file_mmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	.release	= hpfs_file_release,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 	.fsync		= hpfs_file_fsync,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 	.splice_read	= generic_file_splice_read,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 	.unlocked_ioctl	= hpfs_ioctl,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	.compat_ioctl	= compat_ptr_ioctl,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) const struct inode_operations hpfs_file_iops =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 	.setattr	= hpfs_setattr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 	.fiemap		= hpfs_fiemap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) };