From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: hch@infradead.org, viro@zeniv.linux.org.uk, adilger@sun.com,
corbet@lwn.net, serue@us.ibm.com, neilb@suse.de
Cc: linux-fsdevel@vger.kernel.org, sfrench@us.ibm.com,
philippe.deniel@CEA.FR, linux-kernel@vger.kernel.org,
"Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
Subject: [PATCH -V7 2/9] vfs: Add uuid based vfsmount lookup
Date: Wed, 12 May 2010 21:20:37 +0530 [thread overview]
Message-ID: <1273679444-14903-3-git-send-email-aneesh.kumar@linux.vnet.ibm.com> (raw)
In-Reply-To: <1273679444-14903-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com>
This patch add a new superblock operations get_fsid that returns the
UUID mapping for the file system. The UUID returned is used to
identify the file system apart of file_handle
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
---
fs/namespace.c | 47 +++++++++++++++++++++++++++++++++++++++++
include/linux/fs.h | 15 +++++++++++++
include/linux/mnt_namespace.h | 3 ++
3 files changed, 65 insertions(+), 0 deletions(-)
diff --git a/fs/namespace.c b/fs/namespace.c
index 8174c8a..c19e4fa 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -2364,3 +2364,50 @@ void put_mnt_ns(struct mnt_namespace *ns)
kfree(ns);
}
EXPORT_SYMBOL(put_mnt_ns);
+
+/*
+ * Get any vfsmount mapping the uuid in the
+ * task namespace
+ */
+struct vfsmount *fs_get_vfsmount(struct task_struct *task,
+ struct uuid *fsid)
+{
+ int error;
+ struct nsproxy *nsp;
+ struct uuid this_fsid;
+ struct super_block *sb;
+ struct list_head *mount_list;
+ struct mnt_namespace *ns = NULL;
+ struct vfsmount *mnt, *sb_mnt = NULL;
+
+ rcu_read_lock();
+ nsp = task_nsproxy(task);
+ if (nsp) {
+ ns = nsp->mnt_ns;
+ if (ns)
+ get_mnt_ns(ns);
+ }
+ rcu_read_unlock();
+ if (!ns)
+ return NULL;
+ down_read(&namespace_sem);
+ list_for_each(mount_list, &ns->list) {
+ mnt = list_entry(mount_list, struct vfsmount, mnt_list);
+ sb = mnt->mnt_sb;
+ if (!sb->s_op->get_fsid)
+ continue;
+ error = sb->s_op->get_fsid(sb, &this_fsid);
+ if (error)
+ continue;
+ if (!memcmp(fsid->uuid, this_fsid.uuid,
+ sizeof(this_fsid.uuid))) {
+ sb_mnt = mnt;
+ mntget(sb_mnt);
+ break;
+ }
+ }
+ up_read(&namespace_sem);
+
+ put_mnt_ns(ns);
+ return sb_mnt;
+}
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 44f35ae..055734c 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -948,6 +948,20 @@ struct file {
unsigned long f_mnt_write_state;
#endif
};
+
+struct uuid {
+ unsigned char uuid[16];
+};
+
+struct file_handle {
+ int handle_size;
+ int handle_type;
+ /* File system identifier */
+ struct uuid fsid;
+ /* file identifier */
+ unsigned char f_handle[0];
+};
+
extern spinlock_t files_lock;
#define file_list_lock() spin_lock(&files_lock);
#define file_list_unlock() spin_unlock(&files_lock);
@@ -1580,6 +1594,7 @@ struct super_operations {
ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
#endif
int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
+ int (*get_fsid)(struct super_block *, struct uuid *);
};
/*
diff --git a/include/linux/mnt_namespace.h b/include/linux/mnt_namespace.h
index 0b89efc..76c62b1 100644
--- a/include/linux/mnt_namespace.h
+++ b/include/linux/mnt_namespace.h
@@ -22,6 +22,7 @@ struct proc_mounts {
};
struct fs_struct;
+struct uuid;
extern struct mnt_namespace *create_mnt_ns(struct vfsmount *mnt);
extern struct mnt_namespace *copy_mnt_ns(unsigned long, struct mnt_namespace *,
@@ -36,6 +37,8 @@ extern const struct seq_operations mounts_op;
extern const struct seq_operations mountinfo_op;
extern const struct seq_operations mountstats_op;
extern int mnt_had_events(struct proc_mounts *);
+extern struct vfsmount *fs_get_vfsmount(struct task_struct *task,
+ struct uuid *fsid);
#endif
#endif
--
1.7.1.78.g212f0
next prev parent reply other threads:[~2010-05-12 15:50 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-12 15:50 [PATCH -V7 0/8] Generic name to handle and open by handle syscalls Aneesh Kumar K.V
2010-05-12 15:50 ` [PATCH -V7 1/9] exportfs: Return the minimum required handle size Aneesh Kumar K.V
2010-05-12 15:50 ` Aneesh Kumar K.V [this message]
2010-05-12 15:50 ` [PATCH -V7 3/9] vfs: Add name to file handle conversion support Aneesh Kumar K.V
2010-05-12 21:49 ` Andreas Dilger
2010-05-12 22:43 ` Neil Brown
2010-05-13 6:17 ` Aneesh Kumar K. V
2010-05-13 7:11 ` Neil Brown
2010-05-13 8:30 ` Andreas Dilger
2010-05-13 8:47 ` Neil Brown
2010-05-13 14:21 ` Aneesh Kumar K. V
2010-05-13 18:17 ` Aneesh Kumar K. V
2010-05-13 22:54 ` Andreas Dilger
2010-05-14 17:25 ` Al Viro
2010-05-14 18:18 ` Aneesh Kumar K. V
2010-05-14 18:40 ` Al Viro
2010-05-15 5:31 ` Aneesh Kumar K. V
2010-05-15 6:00 ` Al Viro
2010-05-15 15:28 ` Aneesh Kumar K. V
2010-05-13 0:20 ` Dave Chinner
2010-05-13 6:23 ` Aneesh Kumar K. V
2010-05-13 7:31 ` Dave Chinner
2010-05-13 5:56 ` Aneesh Kumar K. V
2010-05-13 14:24 ` Aneesh Kumar K. V
2010-05-12 15:50 ` [PATCH -V7 4/9] vfs: Add open by file handle support Aneesh Kumar K.V
2010-05-12 23:44 ` Neil Brown
2010-05-13 6:09 ` Dave Chinner
2010-05-13 6:37 ` Aneesh Kumar K. V
2010-05-14 10:41 ` Dave Chinner
2010-05-12 15:50 ` [PATCH -V7 5/9] vfs: Add freadlink syscall Aneesh Kumar K.V
2010-05-13 1:43 ` Neil Brown
2010-05-13 6:25 ` Aneesh Kumar K. V
2010-05-13 6:56 ` Neil Brown
2010-05-13 7:34 ` Aneesh Kumar K. V
2010-05-13 8:09 ` Neil Brown
2010-05-14 11:18 ` Aneesh Kumar K. V
2010-05-12 15:50 ` [PATCH -V7 6/9] ext4: Add get_fsid callback Aneesh Kumar K.V
2010-05-13 3:11 ` Dave Chinner
2010-05-13 6:32 ` Aneesh Kumar K. V
2010-05-14 1:44 ` Dave Chinner
2010-05-15 6:09 ` Aneesh Kumar K. V
2010-05-14 17:32 ` Coly Li
2010-05-14 18:21 ` Aneesh Kumar K. V
2010-05-14 19:08 ` Coly Li
2010-05-12 15:50 ` [PATCH -V7 7/9] x86: Add new syscalls for x86_32 Aneesh Kumar K.V
2010-05-12 15:50 ` [PATCH -V7 8/9] x86: Add new syscalls for x86_64 Aneesh Kumar K.V
2010-05-12 15:50 ` [PATCH -V7 9/9] ext3: Add get_fsid callback Aneesh Kumar K.V
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=1273679444-14903-3-git-send-email-aneesh.kumar@linux.vnet.ibm.com \
--to=aneesh.kumar@linux.vnet.ibm.com \
--cc=adilger@sun.com \
--cc=corbet@lwn.net \
--cc=hch@infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=neilb@suse.de \
--cc=philippe.deniel@CEA.FR \
--cc=serue@us.ibm.com \
--cc=sfrench@us.ibm.com \
--cc=viro@zeniv.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).