From: Josef Sipek <jsipek@cs.sunysb.edu>
To: linux-kernel@vger.kernel.org
Cc: linux-fsdevel@vger.kernel.org, hch@infradead.org, akpm@osdl.org,
viro@ftp.linux.org.uk
Subject: [PATCH 19/22][RFC] Unionfs: Helper macros/inlines
Date: Thu, 31 Aug 2006 21:59:46 -0400 [thread overview]
Message-ID: <20060901015945.GT5788@fsl.cs.sunysb.edu> (raw)
In-Reply-To: <20060901013512.GA5788@fsl.cs.sunysb.edu>
From: Josef "Jeff" Sipek <jsipek@cs.sunysb.edu>
This patch contains many macros and inline functions used thoughout Unionfs.
Signed-off-by: Josef "Jeff" Sipek <jsipek@cs.sunysb.edu>
Signed-off-by: David Quigley <dquigley@fsl.cs.sunysb.edu>
Signed-off-by: Erez Zadok <ezk@cs.sunysb.edu>
---
fs/unionfs/fanout.h | 188 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 188 insertions(+)
diff -Nur -x linux-2.6-git/Documentation/dontdiff linux-2.6-git/fs/unionfs/fanout.h linux-2.6-git-unionfs/fs/unionfs/fanout.h
--- linux-2.6-git/fs/unionfs/fanout.h 1969-12-31 19:00:00.000000000 -0500
+++ linux-2.6-git-unionfs/fs/unionfs/fanout.h 2006-08-31 19:04:00.000000000 -0400
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 2003-2006 Erez Zadok
+ * Copyright (c) 2003-2006 Charles P. Wright
+ * Copyright (c) 2005-2006 Josef Sipek
+ * Copyright (c) 2005 Arun M. Krishnakumar
+ * Copyright (c) 2004-2006 David P. Quigley
+ * Copyright (c) 2003-2004 Mohammad Nayyer Zubair
+ * Copyright (c) 2003 Puja Gupta
+ * Copyright (c) 2003 Harikesavan Krishnan
+ * Copyright (c) 2003-2006 Stony Brook University
+ * Copyright (c) 2003-2006 The Research Foundation of State University of New York
+ *
+ * For specific licensing information, see the COPYING file distributed with
+ * this package.
+ *
+ * This Copyright notice must be kept intact and distributed with all sources.
+ */
+
+#ifndef _FANOUT_H_
+#define _FANOUT_H_
+
+/* Inode to private data */
+static inline struct unionfs_inode_info *itopd(const struct inode *inode)
+{
+ return
+ &(container_of(inode, struct unionfs_inode_container, vfs_inode)->
+ info);
+}
+
+#define itohi_ptr(ino) (itopd(ino)->uii_inode)
+#define ibstart(ino) (itopd(ino)->b_start)
+#define ibend(ino) (itopd(ino)->b_end)
+
+/* Superblock to private data */
+#define stopd(super) ((struct unionfs_sb_info *)(super)->s_fs_info)
+#define stopd_lhs(super) ((super)->s_fs_info)
+#define sbstart(sb) 0
+#define sbend(sb) stopd(sb)->b_end
+#define sbmax(sb) (stopd(sb)->b_end + 1)
+
+/* File to private Data */
+#define ftopd(file) ((struct unionfs_file_info *)((file)->private_data))
+#define ftopd_lhs(file) ((file)->private_data)
+#define ftohf_ptr(file) (ftopd(file)->ufi_file)
+#define fbstart(file) (ftopd(file)->b_start)
+#define fbend(file) (ftopd(file)->b_end)
+
+/* File to hidden file. */
+static inline struct file *ftohf(struct file *f)
+{
+ return ftopd(f)->ufi_file[fbstart(f)];
+}
+
+static inline struct file *ftohf_index(const struct file *f, int index)
+{
+ return ftopd(f)->ufi_file[index];
+}
+
+static inline void set_ftohf_index(struct file *f, int index, struct file *val)
+{
+ ftopd(f)->ufi_file[index] = val;
+}
+
+static inline void set_ftohf(struct file *f, struct file *val)
+{
+ ftopd(f)->ufi_file[fbstart(f)] = val;
+}
+
+/* Inode to hidden inode. */
+static inline struct inode *itohi(const struct inode *i)
+{
+ return itopd(i)->uii_inode[ibstart(i)];
+}
+
+static inline struct inode *itohi_index(const struct inode *i, int index)
+{
+ return itopd(i)->uii_inode[index];
+}
+
+static inline void set_itohi_index(struct inode *i, int index,
+ struct inode *val)
+{
+ itopd(i)->uii_inode[index] = val;
+}
+
+static inline void set_itohi(struct inode *i, struct inode *val)
+{
+ itopd(i)->uii_inode[ibstart(i)] = val;
+}
+
+/* Superblock to hidden superblock. */
+static inline struct super_block *stohs(const struct super_block *o)
+{
+ return stopd(o)->usi_data[sbstart(o)].sb;
+}
+
+static inline struct super_block *stohs_index(const struct super_block *o, int index)
+{
+ return stopd(o)->usi_data[index].sb;
+}
+
+static inline void set_stohs_index(struct super_block *o, int index,
+ struct super_block *val)
+{
+ stopd(o)->usi_data[index].sb = val;
+}
+
+static inline void set_stohs(struct super_block *o, struct super_block *val)
+{
+ stopd(o)->usi_data[sbstart(o)].sb = val;
+}
+
+/* Super to hidden mount. */
+static inline struct vfsmount *stohiddenmnt_index(struct super_block *o,
+ int index)
+{
+ return stopd(o)->usi_data[index].hidden_mnt;
+}
+
+static inline void set_stohiddenmnt_index(struct super_block *o, int index,
+ struct vfsmount *val)
+{
+ stopd(o)->usi_data[index].hidden_mnt = val;
+}
+
+/* Branch count macros. */
+static inline int branch_count(struct super_block *o, int index)
+{
+ return atomic_read(&stopd(o)->usi_data[index].sbcount);
+}
+
+static inline void set_branch_count(struct super_block *o, int index, int val)
+{
+ atomic_set(&stopd(o)->usi_data[index].sbcount, val);
+}
+
+static inline void branchget(struct super_block *o, int index)
+{
+ atomic_inc(&stopd(o)->usi_data[index].sbcount);
+}
+
+static inline void branchput(struct super_block *o, int index)
+{
+ atomic_dec(&stopd(o)->usi_data[index].sbcount);
+}
+
+/* Dentry macros */
+static inline struct unionfs_dentry_info *dtopd(const struct dentry *dent)
+{
+ return (struct unionfs_dentry_info *)dent->d_fsdata;
+}
+
+#define dtopd_lhs(dent) ((dent)->d_fsdata)
+#define dtopd_nocheck(dent) dtopd(dent)
+#define dbstart(dent) (dtopd(dent)->udi_bstart)
+#define set_dbstart(dent, val) do { dtopd(dent)->udi_bstart = val; } while(0)
+#define dbend(dent) (dtopd(dent)->udi_bend)
+#define set_dbend(dent, val) do { dtopd(dent)->udi_bend = val; } while(0)
+#define dbopaque(dent) (dtopd(dent)->udi_bopaque)
+#define set_dbopaque(dent, val) do { dtopd(dent)->udi_bopaque = val; } while (0)
+
+static inline void set_dtohd_index(struct dentry *dent, int index,
+ struct dentry *val)
+{
+ dtopd(dent)->udi_dentry[index] = val;
+}
+
+static inline struct dentry *dtohd_index(const struct dentry *dent, int index)
+{
+ return dtopd(dent)->udi_dentry[index];
+}
+
+static inline struct dentry *dtohd(const struct dentry *dent)
+{
+ return dtopd(dent)->udi_dentry[dbstart(dent)];
+}
+
+#define set_dtohd_index_nocheck(dent, index, val) set_dtohd_index(dent, index, val)
+#define dtohd_index_nocheck(dent, index) dtohd_index(dent, index)
+
+#define dtohd_ptr(dent) (dtopd_nocheck(dent)->udi_dentry)
+
+/* Macros for locking a dentry. */
+#define lock_dentry(d) down(&dtopd(d)->udi_sem)
+#define unlock_dentry(d) up(&dtopd(d)->udi_sem)
+#define verify_locked(d)
+
+#endif /* _FANOUT_H */
next prev parent reply other threads:[~2006-09-01 1:59 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-01 1:35 [PATCH 00/22][RFC] Unionfs: Stackable Namespace Unification Filesystem Josef Sipek
2006-09-01 1:37 ` [PATCH 01/22][RFC] Unionfs: Documentation Josef Sipek
2006-09-01 7:42 ` Jan Engelhardt
2006-09-01 1:39 ` [PATCH 02/22][RFC] Unionfs: Kconfig and Makefile Josef Sipek
2006-09-01 12:44 ` Jan Engelhardt
2006-09-01 15:32 ` Randy.Dunlap
2006-09-01 1:40 ` [PATCH 03/22][RFC] Unionfs: Branch management functionality Josef Sipek
2006-09-04 11:20 ` Pekka Enberg
2006-09-01 1:41 ` [PATCH 04/22][RFC] Unionfs: Common file operations Josef Sipek
2006-09-01 12:50 ` Jan Engelhardt
2006-09-01 22:20 ` Trond Myklebust
2006-09-01 22:36 ` Shaya Potter
2006-09-01 22:57 ` Trond Myklebust
2006-09-03 1:03 ` Shaya Potter
2006-09-02 2:47 ` Josef Sipek
2006-09-03 4:10 ` Trond Myklebust
2006-09-01 1:42 ` [PATCH 05/22][RFC] Unionfs: Copyup Functionality Josef Sipek
2006-09-04 6:59 ` Jan Engelhardt
2006-09-04 9:25 ` Josef Sipek
2006-09-04 10:41 ` Jan Engelhardt
2006-09-16 22:13 ` Josef Sipek
2006-09-16 22:26 ` Jan Engelhardt
2006-09-17 1:28 ` Shaya Potter
2006-09-01 1:44 ` [PATCH 06/22][RFC] Unionfs: Dentry operations Josef Sipek
2006-09-04 7:04 ` Jan Engelhardt
2006-09-01 1:45 ` [PATCH 07/22][RFC] Unionfs: Directory file operations Josef Sipek
2006-09-04 7:07 ` Jan Engelhardt
2006-09-01 1:47 ` [PATCH 08/22][RFC] Unionfs: Directory manipulation helper functions Josef Sipek
2006-09-04 7:09 ` Jan Engelhardt
2006-09-04 7:23 ` Jeremy Fitzhardinge
2006-09-01 1:48 ` [PATCH 09/22][RFC] Unionfs: File operations Josef Sipek
2006-09-01 3:02 ` Ian Kent
2006-09-04 7:11 ` Jan Engelhardt
2006-09-01 1:49 ` [PATCH 10/22][RFC] Unionfs: Inode operations Josef Sipek
2006-09-04 7:18 ` Jan Engelhardt
2006-09-01 1:50 ` [PATCH 11/22][RFC] Unionfs: Lookup helper functions Josef Sipek
2006-09-04 7:24 ` Jan Engelhardt
2006-09-01 1:51 ` [PATCH 12/22][RFC] Unionfs: Main module functions Josef Sipek
2006-09-04 7:28 ` Jan Engelhardt
2006-09-01 1:53 ` [PATCH 00/22][RFC] Unionfs: Stackable Namespace Unification Filesystem Stephen Rothwell
2006-09-01 17:23 ` Josef Sipek
2006-09-03 17:42 ` Jan Engelhardt
2006-09-03 19:44 ` Josef Sipek
2006-09-04 11:01 ` Pekka Enberg
2006-09-04 23:34 ` Josef Sipek
2006-09-01 1:53 ` [PATCH 13/22][RFC] Unionfs: Readdir state Josef Sipek
2006-09-04 7:30 ` Jan Engelhardt
2006-09-01 1:54 ` [PATCH 14/22][RFC] Unionfs: Rename Josef Sipek
2006-09-01 1:55 ` [PATCH 15/22][RFC] Unionfs: Privileged operations workqueue Josef Sipek
2006-09-04 7:37 ` Jan Engelhardt
2006-09-01 1:56 ` [PATCH 16/22][RFC] Unionfs: Handling of stale inodes Josef Sipek
2006-09-04 7:39 ` Jan Engelhardt
2006-09-01 1:58 ` [PATCH 17/22][RFC] Unionfs: Miscellaneous helper functions Josef Sipek
2006-09-01 1:58 ` [PATCH 18/22][RFC] Unionfs: Superblock operations Josef Sipek
2006-09-04 7:46 ` Jan Engelhardt
2006-09-04 8:24 ` Andreas Schwab
2006-09-01 1:59 ` Josef Sipek [this message]
2006-09-04 7:49 ` [PATCH 19/22][RFC] Unionfs: Helper macros/inlines Jan Engelhardt
2006-09-01 2:01 ` [PATCH 20/22][RFC] Unionfs: Internal include file Josef Sipek
2006-09-04 7:54 ` Jan Engelhardt
2006-09-01 2:01 ` [PATCH 21/22][RFC] Unionfs: Unlink Josef Sipek
2006-09-01 2:02 ` [PATCH 22/22][RFC] Unionfs: Include file Josef Sipek
2006-09-04 7:55 ` Jan Engelhardt
2006-09-03 11:05 ` [PATCH 00/22][RFC] Unionfs: Stackable Namespace Unification Filesystem Pavel Machek
2006-09-04 12:57 ` Jörn Engel
2006-09-05 4:46 ` Al Boldi
2006-09-05 7:01 ` Jörn Engel
2006-09-04 13:28 ` Shaya Potter
2006-09-04 20:33 ` Pavel Machek
2006-09-04 21:43 ` Shaya Potter
2006-09-04 23:31 ` Josef Sipek
2006-09-05 6:02 ` Jan Engelhardt
2006-09-05 13:02 ` Shaya Potter
2006-09-05 3:08 ` Trond Myklebust
2006-09-05 3:28 ` Shaya Potter
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=20060901015945.GT5788@fsl.cs.sunysb.edu \
--to=jsipek@cs.sunysb.edu \
--cc=akpm@osdl.org \
--cc=hch@infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.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®