From: Erez Zadok <ezk@cs.sunysb.edu>
To: torvalds@linux-foundation.org, akpm@linux-foundation.org,
hch@infradead.org, viro@ftp.linux.org.uk
Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
Erez Zadok <ezk@cs.sunysb.edu>
Subject: [PATCH 02/29] VFS/eCryptfs: use simplified fs_stack API to fsstack_copy_attr_all
Date: Thu, 10 Jan 2008 09:59:21 -0500 [thread overview]
Message-ID: <11999771893150-git-send-email-ezk@cs.sunysb.edu> (raw)
In-Reply-To: <11999771882152-git-send-email-ezk@cs.sunysb.edu>
Acked-by: Mike Halcrow <mhalcrow@us.ibm.com>
Signed-off-by: Erez Zadok <ezk@cs.sunysb.edu>
---
fs/ecryptfs/dentry.c | 2 +-
fs/ecryptfs/inode.c | 6 +++---
fs/ecryptfs/main.c | 2 +-
fs/stack.c | 38 ++++++++++++++++++++++++--------------
include/linux/fs_stack.h | 21 ++++++++++++++++-----
5 files changed, 45 insertions(+), 24 deletions(-)
diff --git a/fs/ecryptfs/dentry.c b/fs/ecryptfs/dentry.c
index cb20b96..a8c1686 100644
--- a/fs/ecryptfs/dentry.c
+++ b/fs/ecryptfs/dentry.c
@@ -62,7 +62,7 @@ static int ecryptfs_d_revalidate(struct dentry *dentry, struct nameidata *nd)
struct inode *lower_inode =
ecryptfs_inode_to_lower(dentry->d_inode);
- fsstack_copy_attr_all(dentry->d_inode, lower_inode, NULL);
+ fsstack_copy_attr_all(dentry->d_inode, lower_inode);
}
out:
return rc;
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
index 5a71918..89e8560 100644
--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
@@ -576,9 +576,9 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
lower_new_dir_dentry->d_inode, lower_new_dentry);
if (rc)
goto out_lock;
- fsstack_copy_attr_all(new_dir, lower_new_dir_dentry->d_inode, NULL);
+ fsstack_copy_attr_all(new_dir, lower_new_dir_dentry->d_inode);
if (new_dir != old_dir)
- fsstack_copy_attr_all(old_dir, lower_old_dir_dentry->d_inode, NULL);
+ fsstack_copy_attr_all(old_dir, lower_old_dir_dentry->d_inode);
out_lock:
unlock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
dput(lower_new_dentry->d_parent);
@@ -912,7 +912,7 @@ static int ecryptfs_setattr(struct dentry *dentry, struct iattr *ia)
rc = notify_change(lower_dentry, ia);
out:
- fsstack_copy_attr_all(inode, lower_inode, NULL);
+ fsstack_copy_attr_all(inode, lower_inode);
return rc;
}
diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c
index e5580bc..6276cdf 100644
--- a/fs/ecryptfs/main.c
+++ b/fs/ecryptfs/main.c
@@ -211,7 +211,7 @@ int ecryptfs_interpose(struct dentry *lower_dentry, struct dentry *dentry,
d_add(dentry, inode);
else
d_instantiate(dentry, inode);
- fsstack_copy_attr_all(inode, lower_inode, NULL);
+ fsstack_copy_attr_all(inode, lower_inode);
/* This size will be overwritten for real files w/ headers and
* other metadata */
fsstack_copy_inode_size(inode, lower_inode);
diff --git a/fs/stack.c b/fs/stack.c
index 67716f6..4336f2b 100644
--- a/fs/stack.c
+++ b/fs/stack.c
@@ -1,24 +1,42 @@
+/*
+ * Copyright (c) 2006-2007 Erez Zadok
+ * Copyright (c) 2006-2007 Josef 'Jeff' Sipek
+ * Copyright (c) 2006-2007 Stony Brook University
+ * Copyright (c) 2006-2007 The Research Foundation of SUNY
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/fs_stack.h>
-/* does _NOT_ require i_mutex to be held.
+/*
+ * does _NOT_ require i_mutex to be held.
*
* This function cannot be inlined since i_size_{read,write} is rather
* heavy-weight on 32-bit systems
*/
void fsstack_copy_inode_size(struct inode *dst, const struct inode *src)
{
- i_size_write(dst, i_size_read((struct inode *)src));
+#if BITS_PER_LONG == 32 && defined(CONFIG_SMP)
+ spin_lock(&dst->i_lock);
+#endif
+ i_size_write(dst, i_size_read(src));
dst->i_blocks = src->i_blocks;
+#if BITS_PER_LONG == 32 && defined(CONFIG_SMP)
+ spin_unlock(&dst->i_lock);
+#endif
}
EXPORT_SYMBOL_GPL(fsstack_copy_inode_size);
-/* copy all attributes; get_nlinks is optional way to override the i_nlink
+/*
+ * copy all attributes; get_nlinks is optional way to override the i_nlink
* copying
*/
-void fsstack_copy_attr_all(struct inode *dest, const struct inode *src,
- int (*get_nlinks)(struct inode *))
+void fsstack_copy_attr_all(struct inode *dest, const struct inode *src)
{
dest->i_mode = src->i_mode;
dest->i_uid = src->i_uid;
@@ -29,14 +47,6 @@ void fsstack_copy_attr_all(struct inode *dest, const struct inode *src,
dest->i_ctime = src->i_ctime;
dest->i_blkbits = src->i_blkbits;
dest->i_flags = src->i_flags;
-
- /*
- * Update the nlinks AFTER updating the above fields, because the
- * get_links callback may depend on them.
- */
- if (!get_nlinks)
- dest->i_nlink = src->i_nlink;
- else
- dest->i_nlink = (*get_nlinks)(dest);
+ dest->i_nlink = src->i_nlink;
}
EXPORT_SYMBOL_GPL(fsstack_copy_attr_all);
diff --git a/include/linux/fs_stack.h b/include/linux/fs_stack.h
index bb516ce..6b52faf 100644
--- a/include/linux/fs_stack.h
+++ b/include/linux/fs_stack.h
@@ -1,17 +1,28 @@
+/*
+ * Copyright (c) 2006-2007 Erez Zadok
+ * Copyright (c) 2006-2007 Josef 'Jeff' Sipek
+ * Copyright (c) 2006-2007 Stony Brook University
+ * Copyright (c) 2006-2007 The Research Foundation of SUNY
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
#ifndef _LINUX_FS_STACK_H
#define _LINUX_FS_STACK_H
-/* This file defines generic functions used primarily by stackable
+/*
+ * This file defines generic functions used primarily by stackable
* filesystems; none of these functions require i_mutex to be held.
*/
#include <linux/fs.h>
/* externs for fs/stack.c */
-extern void fsstack_copy_attr_all(struct inode *dest, const struct inode *src,
- int (*get_nlinks)(struct inode *));
-
-extern void fsstack_copy_inode_size(struct inode *dst, const struct inode *src);
+extern void fsstack_copy_attr_all(struct inode *dest, const struct inode *src);
+extern void fsstack_copy_inode_size(struct inode *dst,
+ const struct inode *src);
/* inlines */
static inline void fsstack_copy_attr_atime(struct inode *dest,
--
1.5.2.2
next prev parent reply other threads:[~2008-01-10 15:01 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-10 14:59 [UNIONFS] 00/29 Unionfs and related patches pre-merge review (v2) Erez Zadok
2008-01-10 14:59 ` [PATCH 01/29] Unionfs: documentation Erez Zadok
2008-01-10 14:59 ` Erez Zadok [this message]
2008-01-10 14:59 ` [PATCH 03/29] Makefile: hook to compile unionfs Erez Zadok
2008-01-10 14:59 ` [PATCH 04/29] Unionfs: main Makefile Erez Zadok
2008-01-10 14:59 ` [PATCH 05/29] Unionfs: fanout header definitions Erez Zadok
2008-01-10 14:59 ` [PATCH 06/29] Unionfs: main header file Erez Zadok
2008-01-10 14:59 ` [PATCH 07/29] Unionfs: common file copyup/revalidation operations Erez Zadok
2008-01-10 14:59 ` [PATCH 08/29] Unionfs: basic file operations Erez Zadok
2008-01-10 14:59 ` [PATCH 09/29] Unionfs: lower-level copyup routines Erez Zadok
2008-01-10 14:59 ` [PATCH 10/29] Unionfs: dentry revalidation Erez Zadok
2008-01-10 14:59 ` [PATCH 11/29] Unionfs: lower-level lookup routines Erez Zadok
2008-01-10 14:59 ` [PATCH 12/29] Unionfs: rename method and helpers Erez Zadok
2008-01-10 14:59 ` [PATCH 13/29] Unionfs: directory reading file operations Erez Zadok
2008-01-10 14:59 ` [PATCH 14/29] Unionfs: readdir helper functions Erez Zadok
2008-01-10 14:59 ` [PATCH 15/29] Unionfs: readdir state helpers Erez Zadok
2008-01-10 14:59 ` [PATCH 16/29] Unionfs: inode operations Erez Zadok
2008-01-10 14:59 ` [PATCH 17/29] Unionfs: unlink/rmdir operations Erez Zadok
2008-01-10 14:59 ` [PATCH 18/29] Unionfs: address-space operations Erez Zadok
2008-01-10 14:59 ` [PATCH 19/29] Unionfs: mount-time and stacking-interposition functions Erez Zadok
2008-01-10 14:59 ` [PATCH 20/29] Unionfs: super_block operations Erez Zadok
2008-01-10 14:59 ` [PATCH 21/29] Unionfs: extended attributes operations Erez Zadok
2008-01-10 14:59 ` [PATCH 22/29] Unionfs: async I/O queue Erez Zadok
2008-01-10 14:59 ` [PATCH 23/29] Unionfs: miscellaneous helper routines Erez Zadok
2008-01-10 14:59 ` [PATCH 24/29] Unionfs: debugging infrastructure Erez Zadok
2008-01-10 14:59 ` [PATCH 25/29] Unionfs file system magic number Erez Zadok
2008-01-10 14:59 ` [PATCH 26/29] Unionfs: common header file for user-land utilities and kernel Erez Zadok
2008-01-10 14:59 ` [PATCH 27/29] VFS path get/put ops used by Unionfs Erez Zadok
2008-01-10 14:59 ` [PATCH 28/29] VFS: export release_open_intent symbol Erez Zadok
2008-01-10 14:59 ` [PATCH 29/29] Put Unionfs and eCryptfs under one layered filesystems menu Erez Zadok
2008-01-10 15:08 ` [UNIONFS] 00/29 Unionfs and related patches pre-merge review (v2) Christoph Hellwig
2008-01-10 15:57 ` Erez Zadok
2008-01-16 21:21 ` Michael Halcrow
2008-01-16 21:41 ` Erez Zadok
2008-01-17 6:00 ` Al Viro
2008-01-17 6:17 ` Erez Zadok
2008-01-26 5:08 ` Erez Zadok
2008-01-26 8:45 ` Al Viro
2008-02-02 18:45 ` Erez Zadok
2008-02-02 20:45 ` Al Viro
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=11999771893150-git-send-email-ezk@cs.sunysb.edu \
--to=ezk@cs.sunysb.edu \
--cc=akpm@linux-foundation.org \
--cc=hch@infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.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
all inboxes | Powered by JetHome®