From: Andrew Morton <akpm@osdl.org>
To: Josef "Jeff" Sipek <jsipek@cs.sunysb.edu>
Cc: linux-kernel@vger.kernel.org, torvalds@osdl.org,
hch@infradead.org, viro@ftp.linux.org.uk,
linux-fsdevel@vger.kernel.org, penberg@cs.helsinki.fi,
ezk@cs.sunysb.edu, mhalcrow@us.ibm.com
Subject: Re: [PATCH 1 of 2] Stackfs: Introduce stackfs_copy_{attr,inode}_*
Date: Fri, 13 Oct 2006 12:27:06 -0700 [thread overview]
Message-ID: <20061013122706.56970df2.akpm@osdl.org> (raw)
In-Reply-To: <ceb6edcac7047367ca16.1160738329@thor.fsl.cs.sunysb.edu>
On Fri, 13 Oct 2006 07:18:49 -0400
Josef "Jeff" Sipek <jsipek@cs.sunysb.edu> wrote:
> From: Josef "Jeff" Sipek <jsipek@cs.sunysb.edu>
>
> The following patch introduces several stackfs_copy_* functions which allow
> stackable filesystems (such as eCryptfs and Unionfs) to easily copy over
> (currently only) inode attributes. This prevents code duplication and allows
> for code reuse.
Fair enough.
> include/linux/stack_fs.h | 65 ++++++++++++++++++++++++++++++++++++++++++++++
The name stack_fs implies that there's a filesystem called stackfs. Only
there isn't. I wonder if we can choose a better name for all of this.
Maybe fs_stack_*?
>
> diff --git a/include/linux/stack_fs.h b/include/linux/stack_fs.h
> new file mode 100644
> --- /dev/null
> +++ b/include/linux/stack_fs.h
> @@ -0,0 +1,65 @@
> +#ifndef _LINUX_STACK_FS_H
> +#define _LINUX_STACK_FS_H
> +
> +/* This file defines generic functions used primarily by stackable
> + * filesystems
> + */
> +
> +static inline void stackfs_copy_inode_size(struct inode *dst,
> + const struct inode *src)
> +{
> + i_size_write(dst, i_size_read((struct inode *)src));
> + dst->i_blocks = src->i_blocks;
> +}
What are the locking requirements for these functions? Presumably the
caller must hold i_mutex on at least the source inode, and perhaps the
destination one?
If i_mutex is held, i_size_read() isn't needed.
If i_mutex is held, i_size_write() isn't needed either.
So please document the locking requirements via source comments and then
see if this can be simplified.
If this function stays as it is, it's too big to inline.
> +static inline void stackfs_copy_attr_atime(struct inode *dest,
> + const struct inode *src)
> +{
> + dest->i_atime = src->i_atime;
> +}
> +
> +static inline void stackfs_copy_attr_times(struct inode *dest,
> + const struct inode *src)
> +{
> + dest->i_atime = src->i_atime;
> + dest->i_mtime = src->i_mtime;
> + dest->i_ctime = src->i_ctime;
> +}
> +
> +static inline void stackfs_copy_attr_timesizes(struct inode *dest,
> + const struct inode *src)
> +{
> + dest->i_atime = src->i_atime;
> + dest->i_mtime = src->i_mtime;
> + dest->i_ctime = src->i_ctime;
> + stackfs_copy_inode_size(dest, src);
> +}
> +
> +static inline void __stackfs_copy_attr_all(struct inode *dest,
> + const struct inode *src,
> + int (*get_nlinks)(struct inode *))
> +{
> + if (!get_nlinks)
> + dest->i_nlink = src->i_nlink;
> + else
> + dest->i_nlink = get_nlinks(dest);
I cannot find a get_nlinks() in 2.6.19-rc2?
> + dest->i_mode = src->i_mode;
> + dest->i_uid = src->i_uid;
> + dest->i_gid = src->i_gid;
> + dest->i_rdev = src->i_rdev;
> + dest->i_atime = src->i_atime;
> + dest->i_mtime = src->i_mtime;
> + dest->i_ctime = src->i_ctime;
> + dest->i_blkbits = src->i_blkbits;
> + dest->i_flags = src->i_flags;
> +}
>
> +static inline void stackfs_copy_attr_all(struct inode *dest,
> + const struct inode *src)
> +{
> + __stackfs_copy_attr_all(dest, src, NULL);
> +}
Many of these functions are too large to be inlined. Suggest they be
placed in fs/fs-stack.c (or whatever we call it).
The functions themselves seem a bit arbitrary.
stackfs_copy_attr_timesizes() copy the three timestamps and the size. Is
there actually any methodical reason for that, or is it simply some
sequence which happens to have been observed in ecryptfs?
And please - if I asked these questions when reviewing the patch, others
will ask them when reading the code two years from now. So please treat my
questions as "gosh, I should have put a comment in there".
next prev parent reply other threads:[~2006-10-13 19:31 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-13 11:18 [PATCH 0 of 2] Stackfs: generic stackable filesystem helper functions Josef Jeff Sipek
2006-10-13 11:18 ` [PATCH 1 of 2] Stackfs: Introduce stackfs_copy_{attr,inode}_* Josef Jeff Sipek
2006-10-13 19:04 ` Andrew James Wade
2006-10-15 17:38 ` [PATCH] " Jan Engelhardt
2006-10-13 19:27 ` Andrew Morton [this message]
2006-10-13 20:07 ` Josef Sipek
2006-10-13 20:16 ` Josef Sipek
2006-10-13 20:37 ` Andrew Morton
2006-10-15 12:36 ` Jan Engelhardt
2006-10-13 11:18 ` [PATCH 2 of 2] eCryptfs: Use stackfs's generic copy inode attr functions Josef Jeff Sipek
2006-10-13 12:02 ` [PATCH 0 of 2] Stackfs: generic stackable filesystem helper functions Pekka Enberg
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=20061013122706.56970df2.akpm@osdl.org \
--to=akpm@osdl.org \
--cc=ezk@cs.sunysb.edu \
--cc=hch@infradead.org \
--cc=jsipek@cs.sunysb.edu \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mhalcrow@us.ibm.com \
--cc=penberg@cs.helsinki.fi \
--cc=torvalds@osdl.org \
--cc=viro@ftp.linux.org.uk \
/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).