All of lore.kernel.org
 help / color / mirror / Atom feed
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.

  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 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.