From: Al Viro <viro@ftp.linux.org.uk>
To: "Theodore Ts'o" <tytso@mit.edu>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [RFC] Slimming down struct inode
Date: Sat, 10 Jun 2006 02:27:57 +0100 [thread overview]
Message-ID: <20060610012757.GC27946@ftp.linux.org.uk> (raw)
In-Reply-To: <E1Foqjw-00010e-Ln@candygram.thunk.org>
On Fri, Jun 09, 2006 at 07:50:08PM -0400, Theodore Ts'o wrote:
> 4) i_state and i_flags are both 4-byte longs, but they only need to be
> 2-byte shorts, and could be placed next to each other.
void wake_up_inode(struct inode *inode)
{
/*
* Prevent speculative execution through spin_unlock(&inode_lock);
*/
smp_mb();
wake_up_bit(&inode->i_state, __I_LOCK);
}
> 5) Nuke i_cindex. This is only used by ieee1394's
> ieee_file_to_instance. There must be another place where we can
> store this --- say, in a ieee1394-specific field in struct file? Or
> maybe it can be derived some other way, but to chew up 4 bytes in
> i_cindex for all inodes just for ieee1394's benefit seems like the
> Wrong Thing(tm).
No, it's actually the right thing for _all_ char devices. And it's used
before we get a struct file. If anything, ->i_rdev should go long-term...
> 6) Separate out those elements which are only used if the inode is open
> into a separate data structure (call it "struct inode_state" for
> the sake of argument):
>
> i_flock, i_mapping, i_data, i_dnotify_mask, i_dnotify,
> inotify_watches, inotify_sem, i_state, dirtied_when,
> i_size_seqcount, i_mutex, i_alloc_sem
>
> This is the motherload. Moving these fields out to a separate
> structure which is only allocated for inodes which are open will save
> a huge amount of memory. But, of course, sweeping through all of the
> code which uses these variables to move them would be a major code
> change. (We can do it initially with #define magic, but we will need
> to audit the code paths to see if it's always to safe to assume that
> inode is open before dereferencing the i_state pointer, or whether we
> need to check to see if it is valid first.)
It is not safe e.g. for ->i_mutex, since that puppy is used not only when
there's an opened file over this inode (or, in fact, before any method
had been called for this inode).
It is _certainly_ not safe for ->i_state (take a look at fs/inode.c).
It is not safe for ->i_data, unless you are willing to dispose of page
cache on close (even leaving aside such things as directories).
No comments on idiotify fields - IIRC, they can also be used before any
->open() on the inode in question.
next prev parent reply other threads:[~2006-06-10 1:27 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-09 23:50 [RFC] Slimming down struct inode Theodore Ts'o
2006-06-10 0:24 ` Bernd Eckenfels
2006-06-10 1:27 ` Al Viro [this message]
2006-06-10 1:56 ` Theodore Tso
2006-06-10 6:24 ` Stefan Richter
2006-06-10 10:48 ` Jan Engelhardt
2006-06-10 15:04 ` Jeff Garzik
2006-06-13 4:35 ` Nathan Scott
2006-06-13 4:32 ` Nathan Scott
2006-06-13 14:00 ` Avi Kivity
2006-06-13 17:44 ` Theodore Tso
2006-06-13 18:08 ` Avi Kivity
2006-06-13 20:10 ` Jan Engelhardt
2006-06-13 20:25 ` Avi Kivity
2006-06-13 22:41 ` Nathan Scott
2006-06-14 10:29 ` Nikita Danilov
2006-06-14 21:50 ` Nathan Scott
2006-06-15 5:49 ` Theodore Tso
2006-06-15 7:01 ` Nathan Scott
2006-06-15 8:46 ` Brian F. G. Bidulock
2006-06-15 10:20 ` Nathan Scott
2006-06-14 23:27 ` Jan Engelhardt
2006-06-15 10:09 ` Nikita Danilov
2006-06-10 11:03 ` Tomasz Torcz
2006-06-10 15:06 ` Jeff Garzik
2006-06-15 0:16 ` Brian F. G. Bidulock
2006-06-15 4:43 ` Theodore Tso
2006-06-15 8:27 ` Brian F. G. Bidulock
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=20060610012757.GC27946@ftp.linux.org.uk \
--to=viro@ftp.linux.org.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=tytso@mit.edu \
/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