From: Joel Becker <jlbec@evilplan.org>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [PATCH 2/3] Ocfs2: Add a new code 'OCFS2_INFO_FREEINODE' for o2info ioctl.
Date: Sun, 20 Feb 2011 04:07:08 -0800 [thread overview]
Message-ID: <20110220120707.GG17784@noexit> (raw)
In-Reply-To: <1296368761-23043-3-git-send-email-tristan.ye@oracle.com>
On Sun, Jan 30, 2011 at 02:26:00PM +0800, Tristan Ye wrote:
> The new code is dedicated to calculate free inodes number of all inode_allocs,
> then return the info to userpace in terms of an array.
>
> Specially, flag 'OCFS2_INFO_FL_NON_COHERENT', manipulated by '--cluster-coherent'
> from userspace, is now going to be involved. setting the flag on means no cluster
> coherency considered, usually, userspace tools choose none-coherency strategy by
> default for the sake of performace.
>
> Signed-off-by: Tristan Ye <tristan.ye@oracle.com>
> ---
> fs/ocfs2/ioctl.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++++
> fs/ocfs2/ocfs2_ioctl.h | 11 ++++
> 2 files changed, 133 insertions(+), 0 deletions(-)
>
> diff --git a/fs/ocfs2/ioctl.c b/fs/ocfs2/ioctl.c
> index 731cf46..18812be 100644
> --- a/fs/ocfs2/ioctl.c
> +++ b/fs/ocfs2/ioctl.c
> @@ -23,6 +23,9 @@
> #include "ioctl.h"
> #include "resize.h"
> #include "refcounttree.h"
> +#include "sysfile.h"
> +#include "dir.h"
> +#include "buffer_head_io.h"
>
> #include <linux/ext2_fs.h>
>
> @@ -62,6 +65,13 @@ static inline void __o2info_clear_request_filled(struct ocfs2_info_request *req)
> #define o2info_clear_request_filled(a) \
> __o2info_clear_request_filled((struct ocfs2_info_request *)&(a))
>
> +static inline int __o2info_coherent(struct ocfs2_info_request *req)
> +{
> + return (!(req->ir_flags & OCFS2_INFO_FL_NON_COHERENT));
> +}
> +
> +#define o2info_coherent(a) __o2info_coherent((struct ocfs2_info_request *)&(a))
> +
> static int ocfs2_get_inode_attr(struct inode *inode, unsigned *flags)
> {
> int status;
> @@ -321,6 +331,114 @@ bail:
> return status;
> }
>
> +int ocfs2_info_scan_inode_alloc(struct ocfs2_super *osb,
> + struct inode *inode_alloc, u64 blkno,
> + struct ocfs2_info_freeinode *fi, u32 slot)
> +{
> + int status = 0, unlock = 0;
> +
> + struct buffer_head *bh = NULL;
> + struct ocfs2_dinode *dinode_alloc = NULL;
> +
> + if (inode_alloc)
> + mutex_lock(&inode_alloc->i_mutex);
> +
> + if (o2info_coherent(*fi)) {
> + status = ocfs2_inode_lock(inode_alloc, &bh, 0);
> + if (status < 0) {
> + mlog_errno(status);
> + goto bail;
> + }
> + unlock = 1;
> + } else {
> + status = ocfs2_read_blocks_sync(osb, blkno, 1, &bh);
> + if (status < 0) {
> + mlog_errno(status);
> + goto bail;
> + }
> + }
> +
> + dinode_alloc = (struct ocfs2_dinode *)bh->b_data;
> +
> + fi->ifi_stat[slot].lfi_total =
> + le32_to_cpu(dinode_alloc->id1.bitmap1.i_total);
> + fi->ifi_stat[slot].lfi_free =
> + le32_to_cpu(dinode_alloc->id1.bitmap1.i_total) -
> + le32_to_cpu(dinode_alloc->id1.bitmap1.i_used);
> +
> +bail:
> + if (unlock)
> + ocfs2_inode_unlock(inode_alloc, 0);
> +
> + if (inode_alloc)
> + mutex_unlock(&inode_alloc->i_mutex);
> +
> + if (inode_alloc)
> + iput(inode_alloc);
> +
> + brelse(bh);
> +
> + mlog_exit(status);
> + return status;
> +}
> +
> +int ocfs2_info_handle_freeinode(struct inode *inode,
> + struct ocfs2_info_request __user *req)
> +{
> + u32 i;
> + u64 blkno = -1;
> + char namebuf[40];
> + int status = -EFAULT, type = INODE_ALLOC_SYSTEM_INODE;
> + struct ocfs2_info_freeinode oifi;
/build/jlbec/linux-2.6/working/fs/ocfs2/ioctl.c: In function ?ocfs2_info_handle_freeinode?:
/build/jlbec/linux-2.6/working/fs/ocfs2/ioctl.c:441: warning: the frame size of 4192 bytes is larger than 2048 bytes
This is speaking to the fact that you've put struct
ocfs2_info_freeinode oifi on the stack. It's over 4K in size. It needs
to be allocated.
Please respin this and the FREEFRAG patch based on it.
Joel
--
Life's Little Instruction Book #43
"Never give up on somebody. Miracles happen every day."
http://www.jlbec.org/
jlbec at evilplan.org
next prev parent reply other threads:[~2011-02-20 12:07 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-30 6:25 [Ocfs2-devel] [PATCH 0/3] Ocfs2: Adding new codes 'OCFS2_INFO_FREEINODE' and 'OCFS2_INFO_FREEFRAG' for o2info ioctl V2 Tristan Ye
2011-01-30 6:25 ` [Ocfs2-devel] [PATCH 1/3] Ocfs2: Using macro to set/clear *FILLED* flags in info handler Tristan Ye
2011-01-31 22:15 ` Mark Fasheh
2011-02-01 1:10 ` Joel Becker
2011-02-01 3:06 ` Mark Fasheh
2011-02-01 6:01 ` Joel Becker
2011-02-01 7:53 ` Tristan Ye
2011-02-01 17:37 ` Mark Fasheh
2011-02-01 7:48 ` Tristan Ye
2011-02-20 12:08 ` Joel Becker
2011-01-30 6:26 ` [Ocfs2-devel] [PATCH 2/3] Ocfs2: Add a new code 'OCFS2_INFO_FREEINODE' for o2info ioctl Tristan Ye
2011-01-31 22:57 ` Mark Fasheh
2011-02-01 7:52 ` Tristan Ye
2011-02-20 12:07 ` Joel Becker [this message]
2011-02-20 12:59 ` Tristan Ye
2011-02-21 2:04 ` Joel Becker
2011-02-21 18:17 ` Sunil Mushran
2011-01-30 6:26 ` [Ocfs2-devel] [PATCH 3/3] Ocfs2: Add a new code 'OCFS2_INFO_FREEFRAG' " Tristan Ye
-- strict thread matches above, loose matches on Subject: below --
2011-05-24 10:07 [Ocfs2-devel] [PATCH 0/3] Ocfs2: Complete rest of o2info patches(v5) Tristan Ye
2011-05-24 10:07 ` [Ocfs2-devel] [PATCH 2/3] Ocfs2: Add a new code 'OCFS2_INFO_FREEINODE' for o2info ioctl Tristan Ye
2011-03-29 2:11 [Ocfs2-devel] [PATCH 0/3] Ocfs2: Complete rest of o2info patches Tristan Ye
2011-03-29 2:11 ` [Ocfs2-devel] [PATCH 2/3] Ocfs2: Add a new code 'OCFS2_INFO_FREEINODE' for o2info ioctl Tristan Ye
2011-02-22 4:59 Tristan Ye
2011-02-22 6:09 ` Joel Becker
2011-02-22 8:02 ` Tristan Ye
2011-02-22 8:15 ` Joel Becker
2011-02-22 8:26 ` Tristan Ye
2011-02-18 4:26 [Ocfs2-devel] [PATCH 0/3] Ocfs2: Adding new codes 'OCFS2_INFO_FREEINODE' and 'OCFS2_INFO_FREEFRAG' for o2info ioctl V3 Tristan Ye
2011-02-18 4:26 ` [Ocfs2-devel] [PATCH 2/3] Ocfs2: Add a new code 'OCFS2_INFO_FREEINODE' for o2info ioctl Tristan Ye
2010-11-16 10:13 [Ocfs2-devel] [PATCH 0/3] Ocfs2: Adding new codes 'OCFS2_INFO_FREEINODE' and 'OCFS2_INFO_FREEFRAG' for o2info ioctl V2 Tristan Ye
2010-11-16 10:13 ` [Ocfs2-devel] [PATCH 2/3] Ocfs2: Add a new code 'OCFS2_INFO_FREEINODE' for o2info ioctl Tristan Ye
2010-12-07 1:07 ` Joel Becker
2010-12-07 1:46 ` Tristan Ye
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=20110220120707.GG17784@noexit \
--to=jlbec@evilplan.org \
--cc=ocfs2-devel@oss.oracle.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).