All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brian Foster <bfoster@redhat.com>
To: Dave Chinner <david@fromorbit.com>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH v4 3/8] xfs: create helper to check whether to free eofblocks on inode
Date: Fri, 28 Sep 2012 16:41:09 -0400	[thread overview]
Message-ID: <50660B65.6010204@redhat.com> (raw)
In-Reply-To: <20120928065917.GF25626@dastard>

On 09/28/2012 02:59 AM, Dave Chinner wrote:
> On Thu, Sep 27, 2012 at 01:45:47PM -0400, Brian Foster wrote:
>> This check is used in multiple places to determine whether we
>> should check for (and potentially free) post EOF blocks on an
>> inode. Add a helper to consolidate the check.
>>
>> Note that when we remove an inode from the cache (xfs_inactive()),
>> we are required to trim post-EOF blocks even if the inode is marked
>> preallocated or append-only to maintain correct space accounting.
>> The 'force' parameter to xfs_can_free_eofblocks() specifies whether
>> we should ignore the prealloc/append-only status of the inode.
>>
>> Signed-off-by: Brian Foster <bfoster@redhat.com>
> ....
>> diff --git a/fs/xfs/xfs_vnodeops.h b/fs/xfs/xfs_vnodeops.h
>> index 447e146..d5701e3 100644
>> --- a/fs/xfs/xfs_vnodeops.h
>> +++ b/fs/xfs/xfs_vnodeops.h
>> @@ -1,6 +1,10 @@
>>  #ifndef _XFS_VNODEOPS_H
>>  #define _XFS_VNODEOPS_H 1
>>  
>> +#include "xfs_bmap_btree.h"
>> +#include "xfs_dinode.h"
>> +#include "xfs_inode.h"
>> +
>>  struct attrlist_cursor_kern;
>>  struct file;
>>  struct iattr;
> 
> Generally we try to avoid including XFS header files in XFS
> header files, and instead order the header files in the .c files
> appropriately.
> 

Ok, good to know. I'll try to clean that up.

>> @@ -9,8 +13,42 @@ struct iovec;
>>  struct kiocb;
>>  struct pipe_inode_info;
>>  struct uio;
>> -struct xfs_inode;
>>  
>> +/*
>> + * Test whether it is appropriate to check an inode for and free post EOF
>> + * blocks. The 'force' parameter determines whether we should also consider
>> + * regular files that are marked preallocated or append-only.
>> + */
>> +static inline bool
>> +xfs_can_free_eofblocks(struct xfs_inode *ip, bool force)
>> +{
>> +	/* prealloc/delalloc exists only on regular files */
>> +	if (!S_ISREG(ip->i_d.di_mode))
>> +		return false;
>> +
>> +	/*
>> +	 * Zero sized files with no cached pages and delalloc blocks will not
>> +	 * have speculative prealloc/delalloc blocks to remove.
>> +	 */
>> +	if (VFS_I(ip)->i_size == 0 &&
>> +	    VN_CACHED(VFS_I(ip)) == 0 &&
>> +	    ip->i_delayed_blks == 0)
>> +		return false;
>> +
>> +	/* If we haven't read in the extent list, then don't do it now. */
>> +	if (!(ip->i_df.if_flags & XFS_IFEXTENTS))
>> +		return false;
>> +
>> +	/*
>> +	 * Do not free real preallocated or append-only files unless the file
>> +	 * has delalloc blocks and we are forced to remove them.
>> +	 */
>> +	if (ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC | XFS_DIFLAG_APPEND))
>> +		if (!force || ip->i_delayed_blks == 0)
>> +			return false;
>> +
>> +	return true;
>> +}
> 
> And I'd say that function is too large for a static inline function
> in a header file, so moving it to xfs_inode.c is probably
> appropriate. I know, I asked you to write it like this, but
> not looking at it for a couple weeks brings new persepctive ;)
> 

No problem. I guess that takes care of the include problem. :)

Brian

> Cheers,
> 
> Dave.
> 

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  reply	other threads:[~2012-09-28 20:41 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-27 17:45 [PATCH v4 0/8] speculative preallocation inode tracking Brian Foster
2012-09-27 17:45 ` [PATCH v4 1/8] xfs: add EOFBLOCKS inode tagging/untagging Brian Foster
2012-09-28  7:04   ` Dave Chinner
2012-09-28 20:40     ` Brian Foster
2012-09-27 17:45 ` [PATCH v4 2/8] xfs: support a tag-based inode_ag_iterator Brian Foster
2012-09-28  7:05   ` Dave Chinner
2012-09-27 17:45 ` [PATCH v4 3/8] xfs: create helper to check whether to free eofblocks on inode Brian Foster
2012-09-28  6:59   ` Dave Chinner
2012-09-28 20:41     ` Brian Foster [this message]
2012-09-27 17:45 ` [PATCH v4 4/8] xfs: export xfs_free_eofblocks() and return EAGAIN on trylock failure Brian Foster
2012-09-28  7:00   ` Dave Chinner
2012-09-27 17:45 ` [PATCH v4 5/8] xfs: create function to scan and clear EOFBLOCKS inodes Brian Foster
2012-09-28  7:21   ` Dave Chinner
2012-09-28 20:41     ` Brian Foster
2012-09-27 17:45 ` [PATCH v4 6/8] xfs: add XFS_IOC_FREE_EOFBLOCKS ioctl Brian Foster
2012-09-28  7:25   ` Dave Chinner
2012-09-27 17:45 ` [PATCH v4 7/8] xfs: add enhanced filtering to EOFBLOCKS scan Brian Foster
2012-09-28  7:53   ` Dave Chinner
2012-09-28 20:42     ` Brian Foster
2012-09-27 17:45 ` [PATCH v4 8/8] xfs: add background scanning to clear EOFBLOCKS inodes Brian Foster
2012-09-28  8:00   ` Dave Chinner
2012-09-28 20:42     ` Brian Foster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50660B65.6010204@redhat.com \
    --to=bfoster@redhat.com \
    --cc=david@fromorbit.com \
    --cc=xfs@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.