* [RFC][PATCH] introduce a btrfs_iget helper
@ 2008-07-14 6:22 Balaji Rao
2008-07-18 18:47 ` Chris Mason
0 siblings, 1 reply; 3+ messages in thread
From: Balaji Rao @ 2008-07-14 6:22 UTC (permalink / raw)
To: linux-btrfs
Hello,
As suggest by Cristoph, this patch factors out a btrfs_iget helper from
btrfs_lookup. This is useful in situations such as in NFS export ops.
Comments ?
Signed-off-by: Balaji Rao <balajirrao@gmail.com>
diff -r 3f0eee804974 ctree.h
--- a/ctree.h Thu Jun 26 10:34:20 2008 -0400
+++ b/ctree.h Mon Jul 14 11:18:27 2008 +0530
@@ -1607,6 +1607,8 @@
struct btrfs_root *root);
struct inode *btrfs_ilookup(struct super_block *s, u64 objectid,
u64 root_objectid);
+struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location,
+ struct btrfs_root *root, int *is_new);
int btrfs_commit_write(struct file *file, struct page *page,
unsigned from, unsigned to);
struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page,
diff -r 3f0eee804974 inode.c
--- a/inode.c Thu Jun 26 10:34:20 2008 -0400
+++ b/inode.c Mon Jul 14 11:18:27 2008 +0530
@@ -1441,6 +1441,33 @@
return inode;
}
+/* Get an inode object given its location and corresponding root.
+ * Returns in *is_new if the inode was read from disk
+ */
+struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location,
+ struct btrfs_root *root, int *is_new)
+{
+ struct inode *inode;
+
+ inode = btrfs_iget_locked(s, location->objectid, root);
+ if (!inode)
+ return ERR_PTR(-EACCES);
+
+ if (inode->i_state & I_NEW) {
+ BTRFS_I(inode)->root = root;
+ memcpy(&BTRFS_I(inode)->location, location, sizeof(*location));
+ btrfs_read_locked_inode(inode);
+ unlock_new_inode(inode);
+ if (is_new)
+ *is_new = 1;
+ } else {
+ if (is_new)
+ *is_new = 0;
+ }
+
+ return inode;
+}
+
static struct dentry *btrfs_lookup(struct inode *dir, struct dentry *dentry,
struct nameidata *nd)
{
@@ -1449,7 +1476,7 @@
struct btrfs_root *root = bi->root;
struct btrfs_root *sub_root = root;
struct btrfs_key location;
- int ret;
+ int ret, new;
if (dentry->d_name.len > BTRFS_NAME_LEN)
return ERR_PTR(-ENAMETOOLONG);
@@ -1467,21 +1494,14 @@
return ERR_PTR(ret);
if (ret > 0)
return ERR_PTR(-ENOENT);
- inode = btrfs_iget_locked(dir->i_sb, location.objectid,
- sub_root);
- if (!inode)
- return ERR_PTR(-EACCES);
- if (inode->i_state & I_NEW) {
- /* the inode and parent dir are two different roots */
- if (sub_root != root) {
- igrab(inode);
- sub_root->inode = inode;
- }
- BTRFS_I(inode)->root = sub_root;
- memcpy(&BTRFS_I(inode)->location, &location,
- sizeof(location));
- btrfs_read_locked_inode(inode);
- unlock_new_inode(inode);
+ inode = btrfs_iget(dir->i_sb, &location, sub_root, &new);
+ if (IS_ERR(inode))
+ return ERR_CAST(inode);
+
+ /* the inode and parent dir are two different roots */
+ if (new && root != sub_root) {
+ igrab(inode);
+ sub_root->inode = inode;
}
}
return d_splice_alias(inode, dentry);
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [RFC][PATCH] introduce a btrfs_iget helper
2008-07-14 6:22 [RFC][PATCH] introduce a btrfs_iget helper Balaji Rao
@ 2008-07-18 18:47 ` Chris Mason
2008-07-19 8:25 ` Balaji Rao
0 siblings, 1 reply; 3+ messages in thread
From: Chris Mason @ 2008-07-18 18:47 UTC (permalink / raw)
To: Balaji Rao; +Cc: linux-btrfs
On Mon, 2008-07-14 at 11:52 +0530, Balaji Rao wrote:
> Hello,
>
> As suggest by Cristoph, this patch factors out a btrfs_iget helper from
> btrfs_lookup. This is useful in situations such as in NFS export ops.
>
> Comments ?
>
No objections, but I'll wait for the full NFS patch before pulling this
one in
-chris
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [RFC][PATCH] introduce a btrfs_iget helper
2008-07-18 18:47 ` Chris Mason
@ 2008-07-19 8:25 ` Balaji Rao
0 siblings, 0 replies; 3+ messages in thread
From: Balaji Rao @ 2008-07-19 8:25 UTC (permalink / raw)
To: Chris Mason; +Cc: linux-btrfs
On Saturday 19 July 2008 12:17:06 am Chris Mason wrote:
> On Mon, 2008-07-14 at 11:52 +0530, Balaji Rao wrote:
> > Hello,
> >
> > As suggest by Cristoph, this patch factors out a btrfs_iget helper from
> > btrfs_lookup. This is useful in situations such as in NFS export ops.
> >
> > Comments ?
>
> No objections, but I'll wait for the full NFS patch before pulling this
> one in
Cool. Its almost done. I'll send it once I hunt down a bug I'm chasing now.
--
Warm Regards,
Balaji Rao
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2008-07-19 8:25 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-14 6:22 [RFC][PATCH] introduce a btrfs_iget helper Balaji Rao
2008-07-18 18:47 ` Chris Mason
2008-07-19 8:25 ` Balaji Rao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox