xfs: create internal eofblocks structure with kuid_t types
PATCH v6 5/7 xfs: create internal eofblocks structure with kuid_t types
Have eofblocks ioctl convert uid_t to kuid_t into internal structure. Update internal filter matching to compare ids with kuid_t types.
Signed-off-by Dwight Engen <[email protected]>
--- fs/xfs/xfs_fs.h | 2 +- fs/xfs/xfs_icache.c | 12 ++++++------ fs/xfs/xfs_icache.h | 43 +++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_ioctl.c | 18 ++++++------------ 4 files changed, 56 insertions(+), 19 deletions(-)
fs/xfs/xfs_fs.h +1 -1
@@ -344,7 +344,7 @@ typedef struct xfs_error_injection {* Speculative preallocation trimming. */ #define XFS_EOFBLOCKS_VERSION 1 -struct xfs_eofblocks { +struct xfs_fs_eofblocks {__u32 eof_version;__u32 eof_flags;uid_t eof_uid;
fs/xfs/xfs_icache.c +6 -6
@@ -619,7 +619,7 @@ restart:/* * Background scanning to trim post-EOF preallocated space. This is queued -* based on the 'background_prealloc_discard_period' tunable (5m by default). +* based on the 'speculative_prealloc_lifetime' tunable (5m by default). */ STATIC void xfs_queue_eofblocks(
@@ -1203,15 +1203,15 @@ xfs_inode_match_id( struct xfs_inode *ip, struct xfs_eofblocks *eofb) { -if (eofb->eof_flags &XFS_EOF_FLAGS_UID && - ip->i_d.di_uid != eofb->eof_uid) +if ((eofb->eof_flags &XFS_EOF_FLAGS_UID ) && + !uid_eq (VFS_I (ip)->i_uid, eofb->eof_uid))return 0 ; -if (eofb->eof_flags &XFS_EOF_FLAGS_GID && - ip->i_d.di_gid != eofb->eof_gid) +if ((eofb->eof_flags &XFS_EOF_FLAGS_GID ) && + !gid_eq (VFS_I (ip)->i_gid, eofb->eof_gid))return 0 ; -if (eofb->eof_flags &XFS_EOF_FLAGS_PRID && +if ((eofb->eof_flags &XFS_EOF_FLAGS_PRID ) &&xfs_get_projid (ip) != eofb->eof_prid)return 0 ;
fs/xfs/xfs_icache.h +43 -0
53 lines not on this page · raw message
fs/xfs/xfs_ioctl.c +6 -12
@@ -1610,23 +1610,17 @@ xfs_file_ioctl(return -error;case XFS_IOC_FREE_EOFBLOCKS : { -struct xfs_eofblocks eofb; +struct xfs_fs_eofblocks eofb; +struct xfs_eofblocks keofb;if (copy_from_user (&eofb, arg,sizeof (eofb)))return -XFS_ERROR (EFAULT ); -if (eofb.eof_version !=XFS_EOFBLOCKS_VERSION ) -return -XFS_ERROR (EINVAL ); - -if (eofb.eof_flags & ~XFS_EOF_FLAGS_VALID ) -return -XFS_ERROR (EINVAL ); - -if (memchr_inv (&eofb.pad32,0 ,sizeof (eofb.pad32)) || -memchr_inv (eofb.pad64,0 ,sizeof (eofb.pad64))) -return -XFS_ERROR (EINVAL ); + error =xfs_fs_eofblocks_from_user (&eofb, &keofb); +if (error) +return -error; - error =xfs_icache_free_eofblocks (mp, &eofb); -return -error; +return -xfs_icache_free_eofblocks (mp, &keofb); }default :
Signature · 6 lines
1.8.1.4 _______________________________________________ xfs mailing list [email protected] http://oss.sgi.com/mailman/listinfo/xfs
Quoted 5 lines · Dwight Engen
Have eofblocks ioctl convert
uid_ttokuid_tinto internal structure. Update internal filter matching to compare ids withkuid_ttypes.Signed-off-by Dwight Engen <[email protected]>---
Looks good.
Reviewed-by Brian Foster <[email protected]>
Quoted 137 lines
fs/xfs/xfs_fs.h | 2 +- fs/xfs/xfs_icache.c | 12 ++++++------ fs/xfs/xfs_icache.h | 43 +++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_ioctl.c | 18 ++++++------------ 4 files changed, 56 insertions(+), 19 deletions(-)fs/xfs/xfs_fs.h +1
-1@@ -344,7 +344,7 @@ typedef struct xfs_error_injection {* Speculative preallocation trimming. */ #define XFS_EOFBLOCKS_VERSION 1 -struct xfs_eofblocks { +struct xfs_fs_eofblocks {__u32 eof_version;__u32 eof_flags;uid_t eof_uid;fs/xfs/xfs_icache.c +6
-6@@ -619,7 +619,7 @@ restart:/* * Background scanning to trim post-EOF preallocated space. This is queued -* based on the 'background_prealloc_discard_period' tunable (5m by default). +* based on the 'speculative_prealloc_lifetime' tunable (5m by default). */ STATIC void xfs_queue_eofblocks(@@ -1203,15 +1203,15 @@ xfs_inode_match_id( struct xfs_inode *ip, struct xfs_eofblocks *eofb) { -if (eofb->eof_flags &XFS_EOF_FLAGS_UID && - ip->i_d.di_uid != eofb->eof_uid) +if ((eofb->eof_flags &XFS_EOF_FLAGS_UID ) && + !uid_eq (VFS_I (ip)->i_uid, eofb->eof_uid))return 0 ; -if (eofb->eof_flags &XFS_EOF_FLAGS_GID && - ip->i_d.di_gid != eofb->eof_gid) +if ((eofb->eof_flags &XFS_EOF_FLAGS_GID ) && + !gid_eq (VFS_I (ip)->i_gid, eofb->eof_gid))return 0 ; -if (eofb->eof_flags &XFS_EOF_FLAGS_PRID && +if ((eofb->eof_flags &XFS_EOF_FLAGS_PRID ) &&xfs_get_projid (ip) != eofb->eof_prid)return 0 ;fs/xfs/xfs_icache.h +43
-0@@ -21,6 +21,14 @@struct xfs_mount ;struct xfs_perag ; +struct xfs_eofblocks { +__u32 eof_flags; +kuid_t eof_uid; +kgid_t eof_gid; +prid_t eof_prid; +__u64 eof_min_file_size; +}; +#define SYNC_WAIT 0x0001/* wait for i/o to complete */ #define SYNC_TRYLOCK 0x0002/* only try to lock inodes */ @@ -49,4 +57,39 @@ int xfs_inode_ag_iterator_tag(struct xfs_mount *mp, int flags, void *args), int flags, void *args, int tag); +static inline int +xfs_fs_eofblocks_from_user ( +struct xfs_fs_eofblocks *src, +struct xfs_eofblocks *dst) +{ +if (src->eof_version !=XFS_EOFBLOCKS_VERSION ) +return EINVAL ; + +if (src->eof_flags & ~XFS_EOF_FLAGS_VALID ) +return EINVAL ; + +if (memchr_inv (&src->pad32,0 ,sizeof (src->pad32)) || +memchr_inv (src->pad64,0 ,sizeof (src->pad64))) +return EINVAL ; + + dst->eof_flags = src->eof_flags; + dst->eof_prid = src->eof_prid; + dst->eof_min_file_size = src->eof_min_file_size; + + dst->eof_uid =INVALID_UID ; +if (src->eof_flags &XFS_EOF_FLAGS_UID ) { + dst->eof_uid =make_kuid (current_user_ns (), src->eof_uid); +if (!uid_valid (dst->eof_uid)) +return EINVAL ; + } + + dst->eof_gid =INVALID_GID ; +if (src->eof_flags &XFS_EOF_FLAGS_GID ) { + dst->eof_gid =make_kgid (current_user_ns (), src->eof_gid); +if (!gid_valid (dst->eof_gid)) +return EINVAL ; + } +return 0 ; +} +#endif fs/xfs/xfs_ioctl.c +2
-10@@ -1610,23 +1610,17 @@ xfs_file_ioctl(return -error;case XFS_IOC_FREE_EOFBLOCKS : { -struct xfs_eofblocks eofb; +struct xfs_fs_eofblocks eofb; +struct xfs_eofblocks keofb;if (copy_from_user (&eofb, arg,sizeof (eofb)))return -XFS_ERROR (EFAULT ); -if (eofb.eof_version !=XFS_EOFBLOCKS_VERSION ) -return -XFS_ERROR (EINVAL ); - -if (eofb.eof_flags & ~XFS_EOF_FLAGS_VALID ) -return -XFS_ERROR (EINVAL ); - -if (memchr_inv (&eofb.pad32,0 ,sizeof (eofb.pad32)) || -memchr_inv (eofb.pad64,0 ,sizeof (eofb.pad64))) -return -XFS_ERROR (EINVAL );
fs/xfs/xfs_ioctl.c xfs_file_ioctl( · line 1626
Quoted 10 lines
fs/xfs/xfs_ioctl.c +4
-2+ error =xfs_fs_eofblocks_from_user (&eofb, &keofb); +if (error) +return -error; - error =xfs_icache_free_eofblocks (mp, &eofb); -return -error; +return -xfs_icache_free_eofblocks (mp, &keofb); }default :
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs