Merge tag 'sched_ext-for-6.12-rc1-fixes-1' of git://git.kernel.org/pub/scm/linux...
[linux-block.git] / fs / gfs2 / inode.h
CommitLineData
7336d0e6 1/* SPDX-License-Identifier: GPL-2.0-only */
b3b94faa
DT
2/*
3 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
3a8a9a10 4 * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
b3b94faa
DT
5 */
6
7#ifndef __INODE_DOT_H__
8#define __INODE_DOT_H__
9
b2760583 10#include <linux/fs.h>
b1e71b06
SW
11#include <linux/buffer_head.h>
12#include <linux/mm.h>
77658aad
SW
13#include "util.h"
14
e45c20d1 15bool gfs2_release_folio(struct folio *folio, gfp_t gfp_mask);
0b2355fe
AG
16ssize_t gfs2_internal_read(struct gfs2_inode *ip,
17 char *buf, loff_t *pos, size_t size);
18void gfs2_set_aops(struct inode *inode);
b1e71b06 19
dbb7cae2 20static inline int gfs2_is_stuffed(const struct gfs2_inode *ip)
b3b94faa 21{
ecc30c79 22 return !ip->i_height;
b3b94faa
DT
23}
24
dbb7cae2 25static inline int gfs2_is_jdata(const struct gfs2_inode *ip)
b3b94faa 26{
383f01fb 27 return ip->i_diskflags & GFS2_DIF_JDATA;
b3b94faa
DT
28}
29
977767a7 30static inline bool gfs2_is_ordered(const struct gfs2_sbd *sdp)
bf36a713 31{
977767a7 32 return sdp->sd_args.ar_data == GFS2_DATA_ORDERED;
bf36a713
SW
33}
34
977767a7 35static inline bool gfs2_is_writeback(const struct gfs2_sbd *sdp)
5561093e 36{
977767a7 37 return sdp->sd_args.ar_data == GFS2_DATA_WRITEBACK;
5561093e
SW
38}
39
dbb7cae2 40static inline int gfs2_is_dir(const struct gfs2_inode *ip)
18ec7d5c 41{
b60623c2 42 return S_ISDIR(ip->i_inode.i_mode);
18ec7d5c
SW
43}
44
77658aad
SW
45static inline void gfs2_set_inode_blocks(struct inode *inode, u64 blocks)
46{
13587069 47 inode->i_blocks = blocks << (inode->i_blkbits - 9);
77658aad
SW
48}
49
50static inline u64 gfs2_get_inode_blocks(const struct inode *inode)
9e2dbdac 51{
13587069 52 return inode->i_blocks >> (inode->i_blkbits - 9);
9e2dbdac
SW
53}
54
77658aad
SW
55static inline void gfs2_add_inode_blocks(struct inode *inode, s64 change)
56{
13587069 57 change <<= inode->i_blkbits - 9;
7c03e756 58 gfs2_assert(GFS2_SB(inode), (change >= 0 || inode->i_blocks >= -change));
77658aad
SW
59 inode->i_blocks += change;
60}
61
dbb7cae2
SW
62static inline int gfs2_check_inum(const struct gfs2_inode *ip, u64 no_addr,
63 u64 no_formal_ino)
64{
65 return ip->i_no_addr == no_addr && ip->i_no_formal_ino == no_formal_ino;
66}
67
bb8d8a6f
SW
68static inline void gfs2_inum_out(const struct gfs2_inode *ip,
69 struct gfs2_dirent *dent)
70{
71 dent->de_inum.no_formal_ino = cpu_to_be64(ip->i_no_formal_ino);
72 dent->de_inum.no_addr = cpu_to_be64(ip->i_no_addr);
73}
74
a2e0f799
SW
75static inline int gfs2_check_internal_file_size(struct inode *inode,
76 u64 minsize, u64 maxsize)
77{
78 u64 size = i_size_read(inode);
79 if (size < minsize || size > maxsize)
80 goto err;
47a9a527 81 if (size & (BIT(inode->i_blkbits) - 1))
a2e0f799
SW
82 goto err;
83 return 0;
84err:
85 gfs2_consist_inode(GFS2_I(inode));
86 return -EIO;
87}
bb8d8a6f 88
0b2355fe
AG
89struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned type,
90 u64 no_addr, u64 no_formal_ino,
91 unsigned int blktype);
92struct inode *gfs2_lookup_by_inum(struct gfs2_sbd *sdp, u64 no_addr,
93 u64 no_formal_ino,
94 unsigned int blktype);
95
96int gfs2_inode_refresh(struct gfs2_inode *ip);
97
98struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name,
99 int is_root);
100int gfs2_permission(struct mnt_idmap *idmap,
101 struct inode *inode, int mask);
102struct inode *gfs2_lookup_meta(struct inode *dip, const char *name);
103void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf);
104int gfs2_open_common(struct inode *inode, struct file *file);
105loff_t gfs2_seek_data(struct file *file, loff_t offset);
106loff_t gfs2_seek_hole(struct file *file, loff_t offset);
b3b94faa 107
10d21988
CH
108extern const struct file_operations gfs2_file_fops_nolock;
109extern const struct file_operations gfs2_dir_fops_nolock;
b2760583 110
0b2355fe
AG
111int gfs2_fileattr_get(struct dentry *dentry, struct fileattr *fa);
112int gfs2_fileattr_set(struct mnt_idmap *idmap,
113 struct dentry *dentry, struct fileattr *fa);
114void gfs2_set_inode_flags(struct inode *inode);
115
f057f6cd 116#ifdef CONFIG_GFS2_FS_LOCKING_DLM
10d21988
CH
117extern const struct file_operations gfs2_file_fops;
118extern const struct file_operations gfs2_dir_fops;
119
f057f6cd
SW
120static inline int gfs2_localflocks(const struct gfs2_sbd *sdp)
121{
122 return sdp->sd_args.ar_localflocks;
123}
124#else /* Single node only */
10d21988
CH
125#define gfs2_file_fops gfs2_file_fops_nolock
126#define gfs2_dir_fops gfs2_dir_fops_nolock
127
f057f6cd
SW
128static inline int gfs2_localflocks(const struct gfs2_sbd *sdp)
129{
130 return 1;
131}
132#endif /* CONFIG_GFS2_FS_LOCKING_DLM */
b2760583 133
b3b94faa
DT
134#endif /* __INODE_DOT_H__ */
135