1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2000-2003,2005 Silicon Graphics, Inc.
6 #ifndef __XFS_INODE_H__
7 #define __XFS_INODE_H__
9 #include "xfs_inode_buf.h"
10 #include "xfs_inode_fork.h"
11 #include "xfs_inode_util.h"
14 * Kernel only inode definitions
20 struct xfs_inode_log_item
;
25 typedef struct xfs_inode
{
26 /* Inode linking and identification information. */
27 struct xfs_mount
*i_mount
; /* fs mount struct ptr */
28 struct xfs_dquot
*i_udquot
; /* user dquot */
29 struct xfs_dquot
*i_gdquot
; /* group dquot */
30 struct xfs_dquot
*i_pdquot
; /* project dquot */
32 /* Inode location stuff */
33 xfs_ino_t i_ino
; /* inode number (agno/agino)*/
34 struct xfs_imap i_imap
; /* location for xfs_imap() */
36 /* Extent information. */
37 struct xfs_ifork
*i_cowfp
; /* copy on write extents */
38 struct xfs_ifork i_df
; /* data fork */
39 struct xfs_ifork i_af
; /* attribute fork */
41 /* Transaction and locking information. */
42 struct xfs_inode_log_item
*i_itemp
; /* logging information */
43 struct rw_semaphore i_lock
; /* inode lock */
44 atomic_t i_pincount
; /* inode pin count */
45 struct llist_node i_gclist
; /* deferred inactivation list */
48 * Bitsets of inode metadata that have been checked and/or are sick.
49 * Callers must hold i_flags_lock before accessing this field.
54 spinlock_t i_flags_lock
; /* inode i_flags lock */
55 /* Miscellaneous state. */
56 unsigned long i_flags
; /* see defined flags below */
57 uint64_t i_delayed_blks
; /* count of delay alloc blks */
58 xfs_fsize_t i_disk_size
; /* number of bytes in file */
59 xfs_rfsblock_t i_nblocks
; /* # of direct & btree blocks */
60 prid_t i_projid
; /* owner's project id */
61 xfs_extlen_t i_extsize
; /* basic/minimum extent size */
62 /* cowextsize is only used for v3 inodes, flushiter for v1/2 */
64 xfs_extlen_t i_cowextsize
; /* basic cow extent size */
65 uint16_t i_flushiter
; /* incremented on flush */
67 uint8_t i_forkoff
; /* attr fork offset >> 3 */
68 enum xfs_metafile_type i_metatype
; /* XFS_METAFILE_* */
69 uint16_t i_diflags
; /* XFS_DIFLAG_... */
70 uint64_t i_diflags2
; /* XFS_DIFLAG2_... */
71 struct timespec64 i_crtime
; /* time created */
74 * Unlinked list pointers. These point to the next and previous inodes
75 * in the AGI unlinked bucket list, respectively. These fields can
76 * only be updated with the AGI locked.
78 * i_next_unlinked caches di_next_unlinked.
80 xfs_agino_t i_next_unlinked
;
83 * If the inode is not on an unlinked list, this field is zero. If the
84 * inode is the first element in an unlinked list, this field is
85 * NULLAGINO. Otherwise, i_prev_unlinked points to the previous inode
86 * in the unlinked list.
88 xfs_agino_t i_prev_unlinked
;
91 struct inode i_vnode
; /* embedded VFS inode */
93 /* pending io completions */
94 spinlock_t i_ioend_lock
;
95 struct work_struct i_ioend_work
;
96 struct list_head i_ioend_list
;
99 static inline bool xfs_inode_on_unlinked_list(const struct xfs_inode
*ip
)
101 return ip
->i_prev_unlinked
!= 0;
104 static inline bool xfs_inode_has_attr_fork(const struct xfs_inode
*ip
)
106 return ip
->i_forkoff
> 0;
109 static inline struct xfs_ifork
*
111 struct xfs_inode
*ip
,
118 if (!xfs_inode_has_attr_fork(ip
))
129 static inline unsigned int xfs_inode_fork_boff(struct xfs_inode
*ip
)
131 return ip
->i_forkoff
<< 3;
134 static inline unsigned int xfs_inode_data_fork_size(struct xfs_inode
*ip
)
136 if (xfs_inode_has_attr_fork(ip
))
137 return xfs_inode_fork_boff(ip
);
139 return XFS_LITINO(ip
->i_mount
);
142 static inline unsigned int xfs_inode_attr_fork_size(struct xfs_inode
*ip
)
144 if (xfs_inode_has_attr_fork(ip
))
145 return XFS_LITINO(ip
->i_mount
) - xfs_inode_fork_boff(ip
);
149 static inline unsigned int
151 struct xfs_inode
*ip
,
156 return xfs_inode_data_fork_size(ip
);
158 return xfs_inode_attr_fork_size(ip
);
164 /* Convert from vfs inode to xfs inode */
165 static inline struct xfs_inode
*XFS_I(struct inode
*inode
)
167 return container_of(inode
, struct xfs_inode
, i_vnode
);
170 /* convert from xfs inode to vfs inode */
171 static inline struct inode
*VFS_I(struct xfs_inode
*ip
)
176 /* convert from const xfs inode to const vfs inode */
177 static inline const struct inode
*VFS_IC(const struct xfs_inode
*ip
)
183 * For regular files we only update the on-disk filesize when actually
184 * writing data back to disk. Until then only the copy in the VFS inode
187 static inline xfs_fsize_t
XFS_ISIZE(struct xfs_inode
*ip
)
189 if (S_ISREG(VFS_I(ip
)->i_mode
))
190 return i_size_read(VFS_I(ip
));
191 return ip
->i_disk_size
;
195 * If this I/O goes past the on-disk inode size update it unless it would
196 * be past the current in-core inode size.
198 static inline xfs_fsize_t
199 xfs_new_eof(struct xfs_inode
*ip
, xfs_fsize_t new_size
)
201 xfs_fsize_t i_size
= i_size_read(VFS_I(ip
));
203 if (new_size
> i_size
|| new_size
< 0)
205 return new_size
> ip
->i_disk_size
? new_size
: 0;
209 * i_flags helper functions
212 __xfs_iflags_set(xfs_inode_t
*ip
, unsigned long flags
)
214 ip
->i_flags
|= flags
;
218 xfs_iflags_set(xfs_inode_t
*ip
, unsigned long flags
)
220 spin_lock(&ip
->i_flags_lock
);
221 __xfs_iflags_set(ip
, flags
);
222 spin_unlock(&ip
->i_flags_lock
);
226 xfs_iflags_clear(xfs_inode_t
*ip
, unsigned long flags
)
228 spin_lock(&ip
->i_flags_lock
);
229 ip
->i_flags
&= ~flags
;
230 spin_unlock(&ip
->i_flags_lock
);
234 __xfs_iflags_test(xfs_inode_t
*ip
, unsigned long flags
)
236 return (ip
->i_flags
& flags
);
240 xfs_iflags_test(xfs_inode_t
*ip
, unsigned long flags
)
243 spin_lock(&ip
->i_flags_lock
);
244 ret
= __xfs_iflags_test(ip
, flags
);
245 spin_unlock(&ip
->i_flags_lock
);
250 xfs_iflags_test_and_clear(xfs_inode_t
*ip
, unsigned long flags
)
254 spin_lock(&ip
->i_flags_lock
);
255 ret
= ip
->i_flags
& flags
;
257 ip
->i_flags
&= ~flags
;
258 spin_unlock(&ip
->i_flags_lock
);
263 xfs_iflags_test_and_set(xfs_inode_t
*ip
, unsigned long flags
)
267 spin_lock(&ip
->i_flags_lock
);
268 ret
= ip
->i_flags
& flags
;
270 ip
->i_flags
|= flags
;
271 spin_unlock(&ip
->i_flags_lock
);
275 static inline bool xfs_is_reflink_inode(const struct xfs_inode
*ip
)
277 return ip
->i_diflags2
& XFS_DIFLAG2_REFLINK
;
280 static inline bool xfs_is_metadir_inode(const struct xfs_inode
*ip
)
282 return ip
->i_diflags2
& XFS_DIFLAG2_METADATA
;
285 static inline bool xfs_is_internal_inode(const struct xfs_inode
*ip
)
287 struct xfs_mount
*mp
= ip
->i_mount
;
289 /* Any file in the metadata directory tree is a metadata inode. */
290 if (xfs_has_metadir(mp
))
291 return xfs_is_metadir_inode(ip
);
294 * Before metadata directories, the only metadata inodes were the
295 * three quota files, the realtime bitmap, and the realtime summary.
297 return ip
->i_ino
== mp
->m_sb
.sb_rbmino
||
298 ip
->i_ino
== mp
->m_sb
.sb_rsumino
||
299 xfs_is_quota_inode(&mp
->m_sb
, ip
->i_ino
);
302 bool xfs_is_always_cow_inode(const struct xfs_inode
*ip
);
304 static inline bool xfs_is_cow_inode(const struct xfs_inode
*ip
)
306 return xfs_is_reflink_inode(ip
) || xfs_is_always_cow_inode(ip
);
309 static inline bool xfs_inode_has_filedata(const struct xfs_inode
*ip
)
311 return ip
->i_df
.if_nextents
> 0 || ip
->i_delayed_blks
> 0;
315 * Check if an inode has any data in the COW fork. This might be often false
316 * even for inodes with the reflink flag when there is no pending COW operation.
318 static inline bool xfs_inode_has_cow_data(const struct xfs_inode
*ip
)
320 return ip
->i_cowfp
&& ip
->i_cowfp
->if_bytes
;
323 static inline bool xfs_inode_has_bigtime(const struct xfs_inode
*ip
)
325 return ip
->i_diflags2
& XFS_DIFLAG2_BIGTIME
;
328 static inline bool xfs_inode_has_large_extent_counts(const struct xfs_inode
*ip
)
330 return ip
->i_diflags2
& XFS_DIFLAG2_NREXT64
;
334 * Decide if this file is a realtime file whose data allocation unit is larger
335 * than a single filesystem block.
337 static inline bool xfs_inode_has_bigrtalloc(const struct xfs_inode
*ip
)
339 return XFS_IS_REALTIME_INODE(ip
) && ip
->i_mount
->m_sb
.sb_rextsize
> 1;
343 * Return the buftarg used for data allocations on a given inode.
345 #define xfs_inode_buftarg(ip) \
346 (XFS_IS_REALTIME_INODE(ip) ? \
347 (ip)->i_mount->m_rtdev_targp : (ip)->i_mount->m_ddev_targp)
350 xfs_inode_can_atomicwrite(
351 struct xfs_inode
*ip
)
353 struct xfs_mount
*mp
= ip
->i_mount
;
354 struct xfs_buftarg
*target
= xfs_inode_buftarg(ip
);
356 if (mp
->m_sb
.sb_blocksize
< target
->bt_bdev_awu_min
)
358 if (mp
->m_sb
.sb_blocksize
> target
->bt_bdev_awu_max
)
365 * In-core inode flags.
367 #define XFS_IRECLAIM (1 << 0) /* started reclaiming this inode */
368 #define XFS_ISTALE (1 << 1) /* inode has been staled */
369 #define XFS_IRECLAIMABLE (1 << 2) /* inode can be reclaimed */
370 #define XFS_INEW (1 << 3) /* inode has just been allocated */
371 #define XFS_IPRESERVE_DM_FIELDS (1 << 4) /* has legacy DMAPI fields set */
372 #define XFS_ITRUNCATED (1 << 5) /* truncated down so flush-on-close */
373 #define XFS_EOFBLOCKS_RELEASED (1 << 6) /* eofblocks were freed in ->release */
374 #define XFS_IFLUSHING (1 << 7) /* inode is being flushed */
375 #define __XFS_IPINNED_BIT 8 /* wakeup key for zero pin count */
376 #define XFS_IPINNED (1 << __XFS_IPINNED_BIT)
377 #define XFS_IEOFBLOCKS (1 << 9) /* has the preallocblocks tag set */
378 #define XFS_NEED_INACTIVE (1 << 10) /* see XFS_INACTIVATING below */
380 * If this unlinked inode is in the middle of recovery, don't let drop_inode
381 * truncate and free the inode. This can happen if we iget the inode during
382 * log recovery to replay a bmap operation on the inode.
384 #define XFS_IRECOVERY (1 << 11)
385 #define XFS_ICOWBLOCKS (1 << 12)/* has the cowblocks tag set */
388 * If we need to update on-disk metadata before this IRECLAIMABLE inode can be
389 * freed, then NEED_INACTIVE will be set. Once we start the updates, the
390 * INACTIVATING bit will be set to keep iget away from this inode. After the
391 * inactivation completes, both flags will be cleared and the inode is a
392 * plain old IRECLAIMABLE inode.
394 #define XFS_INACTIVATING (1 << 13)
396 /* Quotacheck is running but inode has not been added to quota counts. */
397 #define XFS_IQUOTAUNCHECKED (1 << 14)
400 * Remap in progress. Callers that wish to update file data while
401 * holding a shared IOLOCK or MMAPLOCK must drop the lock and retake
402 * the lock in exclusive mode. Relocking the file will block until
403 * IREMAPPING is cleared.
405 #define XFS_IREMAPPING (1U << 15)
407 /* All inode state flags related to inode reclaim. */
408 #define XFS_ALL_IRECLAIM_FLAGS (XFS_IRECLAIMABLE | \
410 XFS_NEED_INACTIVE | \
414 * Per-lifetime flags need to be reset when re-using a reclaimable inode during
415 * inode lookup. This prevents unintended behaviour on the new inode from
418 #define XFS_IRECLAIM_RESET_FLAGS \
419 (XFS_IRECLAIMABLE | XFS_IRECLAIM | \
420 XFS_EOFBLOCKS_RELEASED | XFS_ITRUNCATED | XFS_NEED_INACTIVE | \
421 XFS_INACTIVATING | XFS_IQUOTAUNCHECKED)
424 * Flags for inode locking.
425 * Bit ranges: 1<<1 - 1<<16-1 -- iolock/ilock modes (bitfield)
426 * 1<<16 - 1<<32-1 -- lockdep annotation (integers)
428 #define XFS_IOLOCK_EXCL (1u << 0)
429 #define XFS_IOLOCK_SHARED (1u << 1)
430 #define XFS_ILOCK_EXCL (1u << 2)
431 #define XFS_ILOCK_SHARED (1u << 3)
432 #define XFS_MMAPLOCK_EXCL (1u << 4)
433 #define XFS_MMAPLOCK_SHARED (1u << 5)
435 #define XFS_LOCK_MASK (XFS_IOLOCK_EXCL | XFS_IOLOCK_SHARED \
436 | XFS_ILOCK_EXCL | XFS_ILOCK_SHARED \
437 | XFS_MMAPLOCK_EXCL | XFS_MMAPLOCK_SHARED)
439 #define XFS_LOCK_FLAGS \
440 { XFS_IOLOCK_EXCL, "IOLOCK_EXCL" }, \
441 { XFS_IOLOCK_SHARED, "IOLOCK_SHARED" }, \
442 { XFS_ILOCK_EXCL, "ILOCK_EXCL" }, \
443 { XFS_ILOCK_SHARED, "ILOCK_SHARED" }, \
444 { XFS_MMAPLOCK_EXCL, "MMAPLOCK_EXCL" }, \
445 { XFS_MMAPLOCK_SHARED, "MMAPLOCK_SHARED" }
449 * Flags for lockdep annotations.
451 * XFS_LOCK_PARENT - for directory operations that require locking a
452 * parent directory inode and a child entry inode. IOLOCK requires nesting,
453 * MMAPLOCK does not support this class, ILOCK requires a single subclass
454 * to differentiate parent from child.
456 * XFS_LOCK_RTBITMAP/XFS_LOCK_RTSUM - the realtime device bitmap and summary
457 * inodes do not participate in the normal lock order, and thus have their
460 * XFS_LOCK_INUMORDER - for locking several inodes at the some time
461 * with xfs_lock_inodes(). This flag is used as the starting subclass
462 * and each subsequent lock acquired will increment the subclass by one.
463 * However, MAX_LOCKDEP_SUBCLASSES == 8, which means we are greatly
464 * limited to the subclasses we can represent via nesting. We need at least
465 * 5 inodes nest depth for the ILOCK through rename, and we also have to support
466 * XFS_ILOCK_PARENT, which gives 6 subclasses. That's 6 of the 8 subclasses
467 * supported by lockdep.
469 * This also means we have to number the sub-classes in the lowest bits of
470 * the mask we keep, and we have to ensure we never exceed 3 bits of lockdep
471 * mask and we can't use bit-masking to build the subclasses. What a mess.
476 * 16-19 XFS_IOLOCK_SHIFT dependencies
477 * 20-23 XFS_MMAPLOCK_SHIFT dependencies
478 * 24-31 XFS_ILOCK_SHIFT dependencies
491 * 0-4 subclass values
492 * 5 PARENT subclass (not nestable)
497 #define XFS_IOLOCK_SHIFT 16
498 #define XFS_IOLOCK_MAX_SUBCLASS 3
499 #define XFS_IOLOCK_DEP_MASK 0x000f0000u
501 #define XFS_MMAPLOCK_SHIFT 20
502 #define XFS_MMAPLOCK_NUMORDER 0
503 #define XFS_MMAPLOCK_MAX_SUBCLASS 3
504 #define XFS_MMAPLOCK_DEP_MASK 0x00f00000u
506 #define XFS_ILOCK_SHIFT 24
507 #define XFS_ILOCK_PARENT_VAL 5u
508 #define XFS_ILOCK_MAX_SUBCLASS (XFS_ILOCK_PARENT_VAL - 1)
509 #define XFS_ILOCK_DEP_MASK 0xff000000u
510 #define XFS_ILOCK_PARENT (XFS_ILOCK_PARENT_VAL << XFS_ILOCK_SHIFT)
512 #define XFS_LOCK_SUBCLASS_MASK (XFS_IOLOCK_DEP_MASK | \
513 XFS_MMAPLOCK_DEP_MASK | \
516 #define XFS_IOLOCK_DEP(flags) (((flags) & XFS_IOLOCK_DEP_MASK) \
518 #define XFS_MMAPLOCK_DEP(flags) (((flags) & XFS_MMAPLOCK_DEP_MASK) \
519 >> XFS_MMAPLOCK_SHIFT)
520 #define XFS_ILOCK_DEP(flags) (((flags) & XFS_ILOCK_DEP_MASK) \
524 * Layouts are broken in the BREAK_WRITE case to ensure that
525 * layout-holders do not collide with local writes. Additionally,
526 * layouts are broken in the BREAK_UNMAP case to make sure the
527 * layout-holder has a consistent view of the file's extent map. While
528 * BREAK_WRITE breaks can be satisfied by recalling FL_LAYOUT leases,
529 * BREAK_UNMAP breaks additionally require waiting for busy dax-pages to
532 enum layout_break_reason
{
538 * For multiple groups support: if S_ISGID bit is set in the parent
539 * directory, group of new file is set to that of the parent, and
540 * new subdirectory gets S_ISGID bit from parent.
542 #define XFS_INHERIT_GID(pip) \
543 (xfs_has_grpid((pip)->i_mount) || (VFS_I(pip)->i_mode & S_ISGID))
545 int xfs_inactive(struct xfs_inode
*ip
);
546 int xfs_lookup(struct xfs_inode
*dp
, const struct xfs_name
*name
,
547 struct xfs_inode
**ipp
, struct xfs_name
*ci_name
);
548 int xfs_create(const struct xfs_icreate_args
*iargs
,
549 struct xfs_name
*name
, struct xfs_inode
**ipp
);
550 int xfs_create_tmpfile(const struct xfs_icreate_args
*iargs
,
551 struct xfs_inode
**ipp
);
552 int xfs_remove(struct xfs_inode
*dp
, struct xfs_name
*name
,
553 struct xfs_inode
*ip
);
554 int xfs_link(struct xfs_inode
*tdp
, struct xfs_inode
*sip
,
555 struct xfs_name
*target_name
);
556 int xfs_rename(struct mnt_idmap
*idmap
,
557 struct xfs_inode
*src_dp
, struct xfs_name
*src_name
,
558 struct xfs_inode
*src_ip
, struct xfs_inode
*target_dp
,
559 struct xfs_name
*target_name
,
560 struct xfs_inode
*target_ip
, unsigned int flags
);
562 void xfs_ilock(xfs_inode_t
*, uint
);
563 int xfs_ilock_nowait(xfs_inode_t
*, uint
);
564 void xfs_iunlock(xfs_inode_t
*, uint
);
565 void xfs_ilock_demote(xfs_inode_t
*, uint
);
566 void xfs_assert_ilocked(struct xfs_inode
*, uint
);
567 uint
xfs_ilock_data_map_shared(struct xfs_inode
*);
568 uint
xfs_ilock_attr_map_shared(struct xfs_inode
*);
570 int xfs_ifree(struct xfs_trans
*, struct xfs_inode
*);
571 int xfs_itruncate_extents_flags(struct xfs_trans
**,
572 struct xfs_inode
*, int, xfs_fsize_t
, int);
573 void xfs_iext_realloc(xfs_inode_t
*, int, int);
575 int xfs_log_force_inode(struct xfs_inode
*ip
);
576 void xfs_iunpin_wait(xfs_inode_t
*);
577 #define xfs_ipincount(ip) ((unsigned int) atomic_read(&ip->i_pincount))
579 int xfs_iflush_cluster(struct xfs_buf
*);
580 void xfs_lock_two_inodes(struct xfs_inode
*ip0
, uint ip0_mode
,
581 struct xfs_inode
*ip1
, uint ip1_mode
);
583 int xfs_icreate(struct xfs_trans
*tp
, xfs_ino_t ino
,
584 const struct xfs_icreate_args
*args
, struct xfs_inode
**ipp
);
587 xfs_itruncate_extents(
588 struct xfs_trans
**tpp
,
589 struct xfs_inode
*ip
,
591 xfs_fsize_t new_size
)
593 return xfs_itruncate_extents_flags(tpp
, ip
, whichfork
, new_size
, 0);
596 int xfs_break_dax_layouts(struct inode
*inode
, bool *retry
);
597 int xfs_break_layouts(struct inode
*inode
, uint
*iolock
,
598 enum layout_break_reason reason
);
600 static inline void xfs_update_stable_writes(struct xfs_inode
*ip
)
602 if (bdev_stable_writes(xfs_inode_buftarg(ip
)->bt_bdev
))
603 mapping_set_stable_writes(VFS_I(ip
)->i_mapping
);
605 mapping_clear_stable_writes(VFS_I(ip
)->i_mapping
);
609 * When setting up a newly allocated inode, we need to call
610 * xfs_finish_inode_setup() once the inode is fully instantiated at
611 * the VFS level to prevent the rest of the world seeing the inode
612 * before we've completed instantiation. Otherwise we can do it
613 * the moment the inode lookup is complete.
615 static inline void xfs_finish_inode_setup(struct xfs_inode
*ip
)
617 xfs_iflags_clear(ip
, XFS_INEW
);
619 unlock_new_inode(VFS_I(ip
));
622 static inline void xfs_setup_existing_inode(struct xfs_inode
*ip
)
626 xfs_finish_inode_setup(ip
);
629 void xfs_irele(struct xfs_inode
*ip
);
631 extern struct kmem_cache
*xfs_inode_cache
;
633 /* The default CoW extent size hint. */
634 #define XFS_DEFAULT_COWEXTSZ_HINT 32
636 bool xfs_inode_needs_inactive(struct xfs_inode
*ip
);
638 struct xfs_inode
*xfs_iunlink_lookup(struct xfs_perag
*pag
, xfs_agino_t agino
);
639 int xfs_iunlink_reload_next(struct xfs_trans
*tp
, struct xfs_buf
*agibp
,
640 xfs_agino_t prev_agino
, xfs_agino_t next_agino
);
642 void xfs_end_io(struct work_struct
*work
);
644 int xfs_ilock2_io_mmap(struct xfs_inode
*ip1
, struct xfs_inode
*ip2
);
645 void xfs_iunlock2_io_mmap(struct xfs_inode
*ip1
, struct xfs_inode
*ip2
);
646 void xfs_iunlock2_remapping(struct xfs_inode
*ip1
, struct xfs_inode
*ip2
);
647 void xfs_lock_inodes(struct xfs_inode
**ips
, int inodes
, uint lock_mode
);
648 void xfs_sort_inodes(struct xfs_inode
**i_tab
, unsigned int num_inodes
);
651 xfs_inode_unlinked_incomplete(
652 const struct xfs_inode
*ip
)
654 return VFS_IC(ip
)->i_nlink
== 0 && !xfs_inode_on_unlinked_list(ip
);
656 int xfs_inode_reload_unlinked_bucket(struct xfs_trans
*tp
, struct xfs_inode
*ip
);
657 int xfs_inode_reload_unlinked(struct xfs_inode
*ip
);
659 bool xfs_ifork_zapped(const struct xfs_inode
*ip
, int whichfork
);
660 void xfs_inode_count_blocks(struct xfs_trans
*tp
, struct xfs_inode
*ip
,
661 xfs_filblks_t
*dblocks
, xfs_filblks_t
*rblocks
);
662 unsigned int xfs_inode_alloc_unitsize(struct xfs_inode
*ip
);
664 int xfs_icreate_dqalloc(const struct xfs_icreate_args
*args
,
665 struct xfs_dquot
**udqpp
, struct xfs_dquot
**gdqpp
,
666 struct xfs_dquot
**pdqpp
);
668 #endif /* __XFS_INODE_H__ */