On 09/03/2012 01:17 AM, Dave Chinner wrote: > On Mon, Aug 27, 2012 at 03:51:50PM -0400, Brian Foster wrote: >> The XFS_IOC_FREE_EOFBLOCKS ioctl allows users to invoke an EOFBLOCKS >> scan. The xfs_eofblocks structure is defined to support the command >> parameters (quota type/id and minimum file size). >> >> Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx> >> --- >> fs/xfs/xfs_fs.h | 10 ++++++++++ >> fs/xfs/xfs_ioctl.c | 25 +++++++++++++++++++++++++ >> fs/xfs/xfs_quota.h | 1 + >> fs/xfs/xfs_quotaops.c | 2 +- >> 4 files changed, 37 insertions(+), 1 deletions(-) >> >> diff --git a/fs/xfs/xfs_fs.h b/fs/xfs/xfs_fs.h >> index c13fed8..6f93db9 100644 >> --- a/fs/xfs/xfs_fs.h >> +++ b/fs/xfs/xfs_fs.h >> @@ -339,6 +339,15 @@ typedef struct xfs_error_injection { >> >> >> /* >> + * Speculative preallocation trimming. >> + */ >> +typedef struct xfs_eofblocks { >> + __u32 id; /* quota id */ >> + __u32 qtype; /* quota type */ >> + __u64 min_file_size; /* minimum file size */ >> +} xfs_eofblocks_t; > > No typedefs. > This is something I see throughout the code that I haven't quite followed (i.e., using the _t typedefs vs. not). Is the general consensus to move away from typedefs when possible? ... >> + case XFS_IOC_FREE_EOFBLOCKS: { >> + struct xfs_eofblocks eofb; >> + int qtype; >> + >> + if (copy_from_user(&eofb, arg, sizeof(eofb))) >> + return -XFS_ERROR(EFAULT); >> + >> + qtype = xfs_quota_type(eofb.qtype); >> + >> + /* >> + * TODO: The filtering code currently uses the id in the inode. >> + * Therefore, I don't think it really matters whether the >> + * particular quota type is enabled (and the dquot is attached). >> + * >> + * Alternatively, we could filter by dquot type. This would >> + * mean we might have to make sure dquot's are attached during >> + * the scan and that the particular quota type is enabled. I'm >> + * not sure that this buys us anything. >> + */ > > If quota is not enabled, then a request to free blocks determined by > a quota ID is invalid and should be rejected. It's a user API - what > is and isn't supported needs to be written down in black and white > (i.e. in the xfsctl man page). > Ok. I was thinking that we could support the ability to scan by uid/gid regardless of whether quota is enabled, but perhaps there's no purpose to that if a quota isn't enabled. Brian >> + /* TODO: might want to just use the eofb structure here */ >> + error = xfs_inodes_free_eofblocks(mp, qtype, eofb.id, eofb.min_file_size, EOFBLOCKS_WAIT); > > Yes, just pass the structure - it means it can be passed all the way > down to the execute function, and only that code needs to handle > different versions of the structure. > > Cheers, > > Dave. > _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs