diff options
Diffstat (limited to 'fs/xfs/xfs_icache.h')
-rw-r--r-- | fs/xfs/xfs_icache.h | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/fs/xfs/xfs_icache.h b/fs/xfs/xfs_icache.h index a01afbb3909a..9ed68bb750f5 100644 --- a/fs/xfs/xfs_icache.h +++ b/fs/xfs/xfs_icache.h | |||
@@ -21,17 +21,36 @@ | |||
21 | struct xfs_mount; | 21 | struct xfs_mount; |
22 | struct xfs_perag; | 22 | struct xfs_perag; |
23 | 23 | ||
24 | struct xfs_eofblocks { | ||
25 | __u32 eof_flags; | ||
26 | kuid_t eof_uid; | ||
27 | kgid_t eof_gid; | ||
28 | prid_t eof_prid; | ||
29 | __u64 eof_min_file_size; | ||
30 | }; | ||
31 | |||
24 | #define SYNC_WAIT 0x0001 /* wait for i/o to complete */ | 32 | #define SYNC_WAIT 0x0001 /* wait for i/o to complete */ |
25 | #define SYNC_TRYLOCK 0x0002 /* only try to lock inodes */ | 33 | #define SYNC_TRYLOCK 0x0002 /* only try to lock inodes */ |
26 | 34 | ||
35 | /* | ||
36 | * Flags for xfs_iget() | ||
37 | */ | ||
38 | #define XFS_IGET_CREATE 0x1 | ||
39 | #define XFS_IGET_UNTRUSTED 0x2 | ||
40 | #define XFS_IGET_DONTCACHE 0x4 | ||
41 | |||
27 | int xfs_iget(struct xfs_mount *mp, struct xfs_trans *tp, xfs_ino_t ino, | 42 | int xfs_iget(struct xfs_mount *mp, struct xfs_trans *tp, xfs_ino_t ino, |
28 | uint flags, uint lock_flags, xfs_inode_t **ipp); | 43 | uint flags, uint lock_flags, xfs_inode_t **ipp); |
29 | 44 | ||
45 | /* recovery needs direct inode allocation capability */ | ||
46 | struct xfs_inode * xfs_inode_alloc(struct xfs_mount *mp, xfs_ino_t ino); | ||
47 | void xfs_inode_free(struct xfs_inode *ip); | ||
48 | |||
30 | void xfs_reclaim_worker(struct work_struct *work); | 49 | void xfs_reclaim_worker(struct work_struct *work); |
31 | 50 | ||
32 | int xfs_reclaim_inodes(struct xfs_mount *mp, int mode); | 51 | int xfs_reclaim_inodes(struct xfs_mount *mp, int mode); |
33 | int xfs_reclaim_inodes_count(struct xfs_mount *mp); | 52 | int xfs_reclaim_inodes_count(struct xfs_mount *mp); |
34 | void xfs_reclaim_inodes_nr(struct xfs_mount *mp, int nr_to_scan); | 53 | long xfs_reclaim_inodes_nr(struct xfs_mount *mp, int nr_to_scan); |
35 | 54 | ||
36 | void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); | 55 | void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); |
37 | 56 | ||
@@ -49,4 +68,39 @@ int xfs_inode_ag_iterator_tag(struct xfs_mount *mp, | |||
49 | int flags, void *args), | 68 | int flags, void *args), |
50 | int flags, void *args, int tag); | 69 | int flags, void *args, int tag); |
51 | 70 | ||
71 | static inline int | ||
72 | xfs_fs_eofblocks_from_user( | ||
73 | struct xfs_fs_eofblocks *src, | ||
74 | struct xfs_eofblocks *dst) | ||
75 | { | ||
76 | if (src->eof_version != XFS_EOFBLOCKS_VERSION) | ||
77 | return EINVAL; | ||
78 | |||
79 | if (src->eof_flags & ~XFS_EOF_FLAGS_VALID) | ||
80 | return EINVAL; | ||
81 | |||
82 | if (memchr_inv(&src->pad32, 0, sizeof(src->pad32)) || | ||
83 | memchr_inv(src->pad64, 0, sizeof(src->pad64))) | ||
84 | return EINVAL; | ||
85 | |||
86 | dst->eof_flags = src->eof_flags; | ||
87 | dst->eof_prid = src->eof_prid; | ||
88 | dst->eof_min_file_size = src->eof_min_file_size; | ||
89 | |||
90 | dst->eof_uid = INVALID_UID; | ||
91 | if (src->eof_flags & XFS_EOF_FLAGS_UID) { | ||
92 | dst->eof_uid = make_kuid(current_user_ns(), src->eof_uid); | ||
93 | if (!uid_valid(dst->eof_uid)) | ||
94 | return EINVAL; | ||
95 | } | ||
96 | |||
97 | dst->eof_gid = INVALID_GID; | ||
98 | if (src->eof_flags & XFS_EOF_FLAGS_GID) { | ||
99 | dst->eof_gid = make_kgid(current_user_ns(), src->eof_gid); | ||
100 | if (!gid_valid(dst->eof_gid)) | ||
101 | return EINVAL; | ||
102 | } | ||
103 | return 0; | ||
104 | } | ||
105 | |||
52 | #endif | 106 | #endif |