Merge tag 'spi-v5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi
[linux-2.6-microblaze.git] / fs / xfs / xfs_inode.h
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2000-2003,2005 Silicon Graphics, Inc.
4  * All Rights Reserved.
5  */
6 #ifndef __XFS_INODE_H__
7 #define __XFS_INODE_H__
8
9 #include "xfs_inode_buf.h"
10 #include "xfs_inode_fork.h"
11
12 /*
13  * Kernel only inode definitions
14  */
15 struct xfs_dinode;
16 struct xfs_inode;
17 struct xfs_buf;
18 struct xfs_bmbt_irec;
19 struct xfs_inode_log_item;
20 struct xfs_mount;
21 struct xfs_trans;
22 struct xfs_dquot;
23
24 typedef struct xfs_inode {
25         /* Inode linking and identification information. */
26         struct xfs_mount        *i_mount;       /* fs mount struct ptr */
27         struct xfs_dquot        *i_udquot;      /* user dquot */
28         struct xfs_dquot        *i_gdquot;      /* group dquot */
29         struct xfs_dquot        *i_pdquot;      /* project dquot */
30
31         /* Inode location stuff */
32         xfs_ino_t               i_ino;          /* inode number (agno/agino)*/
33         struct xfs_imap         i_imap;         /* location for xfs_imap() */
34
35         /* Extent information. */
36         struct xfs_ifork        *i_afp;         /* attribute fork pointer */
37         struct xfs_ifork        *i_cowfp;       /* copy on write extents */
38         struct xfs_ifork        i_df;           /* data fork */
39
40         /* Transaction and locking information. */
41         struct xfs_inode_log_item *i_itemp;     /* logging information */
42         mrlock_t                i_lock;         /* inode lock */
43         atomic_t                i_pincount;     /* inode pin count */
44
45         /*
46          * Bitsets of inode metadata that have been checked and/or are sick.
47          * Callers must hold i_flags_lock before accessing this field.
48          */
49         uint16_t                i_checked;
50         uint16_t                i_sick;
51
52         spinlock_t              i_flags_lock;   /* inode i_flags lock */
53         /* Miscellaneous state. */
54         unsigned long           i_flags;        /* see defined flags below */
55         uint64_t                i_delayed_blks; /* count of delay alloc blks */
56         xfs_fsize_t             i_disk_size;    /* number of bytes in file */
57         xfs_rfsblock_t          i_nblocks;      /* # of direct & btree blocks */
58         prid_t                  i_projid;       /* owner's project id */
59         xfs_extlen_t            i_extsize;      /* basic/minimum extent size */
60         /* cowextsize is only used for v3 inodes, flushiter for v1/2 */
61         union {
62                 xfs_extlen_t    i_cowextsize;   /* basic cow extent size */
63                 uint16_t        i_flushiter;    /* incremented on flush */
64         };
65         uint8_t                 i_forkoff;      /* attr fork offset >> 3 */
66         uint16_t                i_diflags;      /* XFS_DIFLAG_... */
67         uint64_t                i_diflags2;     /* XFS_DIFLAG2_... */
68         struct timespec64       i_crtime;       /* time created */
69
70         /* VFS inode */
71         struct inode            i_vnode;        /* embedded VFS inode */
72
73         /* pending io completions */
74         spinlock_t              i_ioend_lock;
75         struct work_struct      i_ioend_work;
76         struct list_head        i_ioend_list;
77 } xfs_inode_t;
78
79 /* Convert from vfs inode to xfs inode */
80 static inline struct xfs_inode *XFS_I(struct inode *inode)
81 {
82         return container_of(inode, struct xfs_inode, i_vnode);
83 }
84
85 /* convert from xfs inode to vfs inode */
86 static inline struct inode *VFS_I(struct xfs_inode *ip)
87 {
88         return &ip->i_vnode;
89 }
90
91 /*
92  * For regular files we only update the on-disk filesize when actually
93  * writing data back to disk.  Until then only the copy in the VFS inode
94  * is uptodate.
95  */
96 static inline xfs_fsize_t XFS_ISIZE(struct xfs_inode *ip)
97 {
98         if (S_ISREG(VFS_I(ip)->i_mode))
99                 return i_size_read(VFS_I(ip));
100         return ip->i_disk_size;
101 }
102
103 /*
104  * If this I/O goes past the on-disk inode size update it unless it would
105  * be past the current in-core inode size.
106  */
107 static inline xfs_fsize_t
108 xfs_new_eof(struct xfs_inode *ip, xfs_fsize_t new_size)
109 {
110         xfs_fsize_t i_size = i_size_read(VFS_I(ip));
111
112         if (new_size > i_size || new_size < 0)
113                 new_size = i_size;
114         return new_size > ip->i_disk_size ? new_size : 0;
115 }
116
117 /*
118  * i_flags helper functions
119  */
120 static inline void
121 __xfs_iflags_set(xfs_inode_t *ip, unsigned short flags)
122 {
123         ip->i_flags |= flags;
124 }
125
126 static inline void
127 xfs_iflags_set(xfs_inode_t *ip, unsigned short flags)
128 {
129         spin_lock(&ip->i_flags_lock);
130         __xfs_iflags_set(ip, flags);
131         spin_unlock(&ip->i_flags_lock);
132 }
133
134 static inline void
135 xfs_iflags_clear(xfs_inode_t *ip, unsigned short flags)
136 {
137         spin_lock(&ip->i_flags_lock);
138         ip->i_flags &= ~flags;
139         spin_unlock(&ip->i_flags_lock);
140 }
141
142 static inline int
143 __xfs_iflags_test(xfs_inode_t *ip, unsigned short flags)
144 {
145         return (ip->i_flags & flags);
146 }
147
148 static inline int
149 xfs_iflags_test(xfs_inode_t *ip, unsigned short flags)
150 {
151         int ret;
152         spin_lock(&ip->i_flags_lock);
153         ret = __xfs_iflags_test(ip, flags);
154         spin_unlock(&ip->i_flags_lock);
155         return ret;
156 }
157
158 static inline int
159 xfs_iflags_test_and_clear(xfs_inode_t *ip, unsigned short flags)
160 {
161         int ret;
162
163         spin_lock(&ip->i_flags_lock);
164         ret = ip->i_flags & flags;
165         if (ret)
166                 ip->i_flags &= ~flags;
167         spin_unlock(&ip->i_flags_lock);
168         return ret;
169 }
170
171 static inline int
172 xfs_iflags_test_and_set(xfs_inode_t *ip, unsigned short flags)
173 {
174         int ret;
175
176         spin_lock(&ip->i_flags_lock);
177         ret = ip->i_flags & flags;
178         if (!ret)
179                 ip->i_flags |= flags;
180         spin_unlock(&ip->i_flags_lock);
181         return ret;
182 }
183
184 static inline prid_t
185 xfs_get_initial_prid(struct xfs_inode *dp)
186 {
187         if (dp->i_diflags & XFS_DIFLAG_PROJINHERIT)
188                 return dp->i_projid;
189
190         return XFS_PROJID_DEFAULT;
191 }
192
193 static inline bool xfs_is_reflink_inode(struct xfs_inode *ip)
194 {
195         return ip->i_diflags2 & XFS_DIFLAG2_REFLINK;
196 }
197
198 static inline bool xfs_is_metadata_inode(struct xfs_inode *ip)
199 {
200         struct xfs_mount        *mp = ip->i_mount;
201
202         return ip == mp->m_rbmip || ip == mp->m_rsumip ||
203                 xfs_is_quota_inode(&mp->m_sb, ip->i_ino);
204 }
205
206 /*
207  * Check if an inode has any data in the COW fork.  This might be often false
208  * even for inodes with the reflink flag when there is no pending COW operation.
209  */
210 static inline bool xfs_inode_has_cow_data(struct xfs_inode *ip)
211 {
212         return ip->i_cowfp && ip->i_cowfp->if_bytes;
213 }
214
215 static inline bool xfs_inode_has_bigtime(struct xfs_inode *ip)
216 {
217         return ip->i_diflags2 & XFS_DIFLAG2_BIGTIME;
218 }
219
220 /*
221  * Return the buftarg used for data allocations on a given inode.
222  */
223 #define xfs_inode_buftarg(ip) \
224         (XFS_IS_REALTIME_INODE(ip) ? \
225                 (ip)->i_mount->m_rtdev_targp : (ip)->i_mount->m_ddev_targp)
226
227 /*
228  * In-core inode flags.
229  */
230 #define XFS_IRECLAIM            (1 << 0) /* started reclaiming this inode */
231 #define XFS_ISTALE              (1 << 1) /* inode has been staled */
232 #define XFS_IRECLAIMABLE        (1 << 2) /* inode can be reclaimed */
233 #define __XFS_INEW_BIT          3        /* inode has just been allocated */
234 #define XFS_INEW                (1 << __XFS_INEW_BIT)
235 #define XFS_IPRESERVE_DM_FIELDS (1 << 4) /* has legacy DMAPI fields set */
236 #define XFS_ITRUNCATED          (1 << 5) /* truncated down so flush-on-close */
237 #define XFS_IDIRTY_RELEASE      (1 << 6) /* dirty release already seen */
238 #define XFS_IFLUSHING           (1 << 7) /* inode is being flushed */
239 #define __XFS_IPINNED_BIT       8        /* wakeup key for zero pin count */
240 #define XFS_IPINNED             (1 << __XFS_IPINNED_BIT)
241 #define XFS_IEOFBLOCKS          (1 << 9) /* has the preallocblocks tag set */
242 /*
243  * If this unlinked inode is in the middle of recovery, don't let drop_inode
244  * truncate and free the inode.  This can happen if we iget the inode during
245  * log recovery to replay a bmap operation on the inode.
246  */
247 #define XFS_IRECOVERY           (1 << 11)
248 #define XFS_ICOWBLOCKS          (1 << 12)/* has the cowblocks tag set */
249
250 /*
251  * Per-lifetime flags need to be reset when re-using a reclaimable inode during
252  * inode lookup. This prevents unintended behaviour on the new inode from
253  * ocurring.
254  */
255 #define XFS_IRECLAIM_RESET_FLAGS        \
256         (XFS_IRECLAIMABLE | XFS_IRECLAIM | \
257          XFS_IDIRTY_RELEASE | XFS_ITRUNCATED)
258
259 /*
260  * Flags for inode locking.
261  * Bit ranges:  1<<1  - 1<<16-1 -- iolock/ilock modes (bitfield)
262  *              1<<16 - 1<<32-1 -- lockdep annotation (integers)
263  */
264 #define XFS_IOLOCK_EXCL         (1<<0)
265 #define XFS_IOLOCK_SHARED       (1<<1)
266 #define XFS_ILOCK_EXCL          (1<<2)
267 #define XFS_ILOCK_SHARED        (1<<3)
268 #define XFS_MMAPLOCK_EXCL       (1<<4)
269 #define XFS_MMAPLOCK_SHARED     (1<<5)
270
271 #define XFS_LOCK_MASK           (XFS_IOLOCK_EXCL | XFS_IOLOCK_SHARED \
272                                 | XFS_ILOCK_EXCL | XFS_ILOCK_SHARED \
273                                 | XFS_MMAPLOCK_EXCL | XFS_MMAPLOCK_SHARED)
274
275 #define XFS_LOCK_FLAGS \
276         { XFS_IOLOCK_EXCL,      "IOLOCK_EXCL" }, \
277         { XFS_IOLOCK_SHARED,    "IOLOCK_SHARED" }, \
278         { XFS_ILOCK_EXCL,       "ILOCK_EXCL" }, \
279         { XFS_ILOCK_SHARED,     "ILOCK_SHARED" }, \
280         { XFS_MMAPLOCK_EXCL,    "MMAPLOCK_EXCL" }, \
281         { XFS_MMAPLOCK_SHARED,  "MMAPLOCK_SHARED" }
282
283
284 /*
285  * Flags for lockdep annotations.
286  *
287  * XFS_LOCK_PARENT - for directory operations that require locking a
288  * parent directory inode and a child entry inode. IOLOCK requires nesting,
289  * MMAPLOCK does not support this class, ILOCK requires a single subclass
290  * to differentiate parent from child.
291  *
292  * XFS_LOCK_RTBITMAP/XFS_LOCK_RTSUM - the realtime device bitmap and summary
293  * inodes do not participate in the normal lock order, and thus have their
294  * own subclasses.
295  *
296  * XFS_LOCK_INUMORDER - for locking several inodes at the some time
297  * with xfs_lock_inodes().  This flag is used as the starting subclass
298  * and each subsequent lock acquired will increment the subclass by one.
299  * However, MAX_LOCKDEP_SUBCLASSES == 8, which means we are greatly
300  * limited to the subclasses we can represent via nesting. We need at least
301  * 5 inodes nest depth for the ILOCK through rename, and we also have to support
302  * XFS_ILOCK_PARENT, which gives 6 subclasses. Then we have XFS_ILOCK_RTBITMAP
303  * and XFS_ILOCK_RTSUM, which are another 2 unique subclasses, so that's all
304  * 8 subclasses supported by lockdep.
305  *
306  * This also means we have to number the sub-classes in the lowest bits of
307  * the mask we keep, and we have to ensure we never exceed 3 bits of lockdep
308  * mask and we can't use bit-masking to build the subclasses. What a mess.
309  *
310  * Bit layout:
311  *
312  * Bit          Lock Region
313  * 16-19        XFS_IOLOCK_SHIFT dependencies
314  * 20-23        XFS_MMAPLOCK_SHIFT dependencies
315  * 24-31        XFS_ILOCK_SHIFT dependencies
316  *
317  * IOLOCK values
318  *
319  * 0-3          subclass value
320  * 4-7          unused
321  *
322  * MMAPLOCK values
323  *
324  * 0-3          subclass value
325  * 4-7          unused
326  *
327  * ILOCK values
328  * 0-4          subclass values
329  * 5            PARENT subclass (not nestable)
330  * 6            RTBITMAP subclass (not nestable)
331  * 7            RTSUM subclass (not nestable)
332  * 
333  */
334 #define XFS_IOLOCK_SHIFT                16
335 #define XFS_IOLOCK_MAX_SUBCLASS         3
336 #define XFS_IOLOCK_DEP_MASK             0x000f0000
337
338 #define XFS_MMAPLOCK_SHIFT              20
339 #define XFS_MMAPLOCK_NUMORDER           0
340 #define XFS_MMAPLOCK_MAX_SUBCLASS       3
341 #define XFS_MMAPLOCK_DEP_MASK           0x00f00000
342
343 #define XFS_ILOCK_SHIFT                 24
344 #define XFS_ILOCK_PARENT_VAL            5
345 #define XFS_ILOCK_MAX_SUBCLASS          (XFS_ILOCK_PARENT_VAL - 1)
346 #define XFS_ILOCK_RTBITMAP_VAL          6
347 #define XFS_ILOCK_RTSUM_VAL             7
348 #define XFS_ILOCK_DEP_MASK              0xff000000
349 #define XFS_ILOCK_PARENT                (XFS_ILOCK_PARENT_VAL << XFS_ILOCK_SHIFT)
350 #define XFS_ILOCK_RTBITMAP              (XFS_ILOCK_RTBITMAP_VAL << XFS_ILOCK_SHIFT)
351 #define XFS_ILOCK_RTSUM                 (XFS_ILOCK_RTSUM_VAL << XFS_ILOCK_SHIFT)
352
353 #define XFS_LOCK_SUBCLASS_MASK  (XFS_IOLOCK_DEP_MASK | \
354                                  XFS_MMAPLOCK_DEP_MASK | \
355                                  XFS_ILOCK_DEP_MASK)
356
357 #define XFS_IOLOCK_DEP(flags)   (((flags) & XFS_IOLOCK_DEP_MASK) \
358                                         >> XFS_IOLOCK_SHIFT)
359 #define XFS_MMAPLOCK_DEP(flags) (((flags) & XFS_MMAPLOCK_DEP_MASK) \
360                                         >> XFS_MMAPLOCK_SHIFT)
361 #define XFS_ILOCK_DEP(flags)    (((flags) & XFS_ILOCK_DEP_MASK) \
362                                         >> XFS_ILOCK_SHIFT)
363
364 /*
365  * Layouts are broken in the BREAK_WRITE case to ensure that
366  * layout-holders do not collide with local writes. Additionally,
367  * layouts are broken in the BREAK_UNMAP case to make sure the
368  * layout-holder has a consistent view of the file's extent map. While
369  * BREAK_WRITE breaks can be satisfied by recalling FL_LAYOUT leases,
370  * BREAK_UNMAP breaks additionally require waiting for busy dax-pages to
371  * go idle.
372  */
373 enum layout_break_reason {
374         BREAK_WRITE,
375         BREAK_UNMAP,
376 };
377
378 /*
379  * For multiple groups support: if S_ISGID bit is set in the parent
380  * directory, group of new file is set to that of the parent, and
381  * new subdirectory gets S_ISGID bit from parent.
382  */
383 #define XFS_INHERIT_GID(pip)    \
384         (((pip)->i_mount->m_flags & XFS_MOUNT_GRPID) || \
385          (VFS_I(pip)->i_mode & S_ISGID))
386
387 int             xfs_release(struct xfs_inode *ip);
388 void            xfs_inactive(struct xfs_inode *ip);
389 int             xfs_lookup(struct xfs_inode *dp, struct xfs_name *name,
390                            struct xfs_inode **ipp, struct xfs_name *ci_name);
391 int             xfs_create(struct user_namespace *mnt_userns,
392                            struct xfs_inode *dp, struct xfs_name *name,
393                            umode_t mode, dev_t rdev, bool need_xattr,
394                            struct xfs_inode **ipp);
395 int             xfs_create_tmpfile(struct user_namespace *mnt_userns,
396                            struct xfs_inode *dp, umode_t mode,
397                            struct xfs_inode **ipp);
398 int             xfs_remove(struct xfs_inode *dp, struct xfs_name *name,
399                            struct xfs_inode *ip);
400 int             xfs_link(struct xfs_inode *tdp, struct xfs_inode *sip,
401                          struct xfs_name *target_name);
402 int             xfs_rename(struct user_namespace *mnt_userns,
403                            struct xfs_inode *src_dp, struct xfs_name *src_name,
404                            struct xfs_inode *src_ip, struct xfs_inode *target_dp,
405                            struct xfs_name *target_name,
406                            struct xfs_inode *target_ip, unsigned int flags);
407
408 void            xfs_ilock(xfs_inode_t *, uint);
409 int             xfs_ilock_nowait(xfs_inode_t *, uint);
410 void            xfs_iunlock(xfs_inode_t *, uint);
411 void            xfs_ilock_demote(xfs_inode_t *, uint);
412 bool            xfs_isilocked(struct xfs_inode *, uint);
413 uint            xfs_ilock_data_map_shared(struct xfs_inode *);
414 uint            xfs_ilock_attr_map_shared(struct xfs_inode *);
415
416 uint            xfs_ip2xflags(struct xfs_inode *);
417 int             xfs_ifree(struct xfs_trans *, struct xfs_inode *);
418 int             xfs_itruncate_extents_flags(struct xfs_trans **,
419                                 struct xfs_inode *, int, xfs_fsize_t, int);
420 void            xfs_iext_realloc(xfs_inode_t *, int, int);
421
422 int             xfs_log_force_inode(struct xfs_inode *ip);
423 void            xfs_iunpin_wait(xfs_inode_t *);
424 #define xfs_ipincount(ip)       ((unsigned int) atomic_read(&ip->i_pincount))
425
426 int             xfs_iflush_cluster(struct xfs_buf *);
427 void            xfs_lock_two_inodes(struct xfs_inode *ip0, uint ip0_mode,
428                                 struct xfs_inode *ip1, uint ip1_mode);
429
430 xfs_extlen_t    xfs_get_extsz_hint(struct xfs_inode *ip);
431 xfs_extlen_t    xfs_get_cowextsz_hint(struct xfs_inode *ip);
432
433 int xfs_init_new_inode(struct user_namespace *mnt_userns, struct xfs_trans *tp,
434                 struct xfs_inode *pip, xfs_ino_t ino, umode_t mode,
435                 xfs_nlink_t nlink, dev_t rdev, prid_t prid, bool init_xattrs,
436                 struct xfs_inode **ipp);
437
438 static inline int
439 xfs_itruncate_extents(
440         struct xfs_trans        **tpp,
441         struct xfs_inode        *ip,
442         int                     whichfork,
443         xfs_fsize_t             new_size)
444 {
445         return xfs_itruncate_extents_flags(tpp, ip, whichfork, new_size, 0);
446 }
447
448 /* from xfs_file.c */
449 enum xfs_prealloc_flags {
450         XFS_PREALLOC_SET        = (1 << 1),
451         XFS_PREALLOC_CLEAR      = (1 << 2),
452         XFS_PREALLOC_SYNC       = (1 << 3),
453         XFS_PREALLOC_INVISIBLE  = (1 << 4),
454 };
455
456 int     xfs_update_prealloc_flags(struct xfs_inode *ip,
457                                   enum xfs_prealloc_flags flags);
458 int     xfs_break_layouts(struct inode *inode, uint *iolock,
459                 enum layout_break_reason reason);
460
461 /* from xfs_iops.c */
462 extern void xfs_setup_inode(struct xfs_inode *ip);
463 extern void xfs_setup_iops(struct xfs_inode *ip);
464 extern void xfs_diflags_to_iflags(struct xfs_inode *ip, bool init);
465
466 /*
467  * When setting up a newly allocated inode, we need to call
468  * xfs_finish_inode_setup() once the inode is fully instantiated at
469  * the VFS level to prevent the rest of the world seeing the inode
470  * before we've completed instantiation. Otherwise we can do it
471  * the moment the inode lookup is complete.
472  */
473 static inline void xfs_finish_inode_setup(struct xfs_inode *ip)
474 {
475         xfs_iflags_clear(ip, XFS_INEW);
476         barrier();
477         unlock_new_inode(VFS_I(ip));
478         wake_up_bit(&ip->i_flags, __XFS_INEW_BIT);
479 }
480
481 static inline void xfs_setup_existing_inode(struct xfs_inode *ip)
482 {
483         xfs_setup_inode(ip);
484         xfs_setup_iops(ip);
485         xfs_finish_inode_setup(ip);
486 }
487
488 void xfs_irele(struct xfs_inode *ip);
489
490 extern struct kmem_zone *xfs_inode_zone;
491
492 /* The default CoW extent size hint. */
493 #define XFS_DEFAULT_COWEXTSZ_HINT 32
494
495 int xfs_iunlink_init(struct xfs_perag *pag);
496 void xfs_iunlink_destroy(struct xfs_perag *pag);
497
498 void xfs_end_io(struct work_struct *work);
499
500 int xfs_ilock2_io_mmap(struct xfs_inode *ip1, struct xfs_inode *ip2);
501 void xfs_iunlock2_io_mmap(struct xfs_inode *ip1, struct xfs_inode *ip2);
502
503 #endif  /* __XFS_INODE_H__ */