* [PATCH] btrfs: Handle NULL inode return from btrfs_lookup_dentry()
@ 2011-08-05 16:48 Mark Fasheh
2011-08-09 4:45 ` Tsutomu Itoh
0 siblings, 1 reply; 2+ messages in thread
From: Mark Fasheh @ 2011-08-05 16:48 UTC (permalink / raw)
To: linux-btrfs; +Cc: chris.mason
Right now in create_snapshot(), we'll BUG() if btrfs_lookup_dentry() returns
a NULL inode (negative dentry). Getting a negative dentry here probably
isn't ever expected to happen however two things lead me to believe that we
should trap this anyway:
- I don't see any possiblity of serious fs corruption from handling the
error. I do wonder though if we could have an "orphaned" snapshot? Even
if we did that doesn't strike me as needing to crash the machine. (Q:
Perhaps going read-only is the eventual solution here?)
- It's very trivial to pass an -ENOENT back to userspace as we're pretty
high up the call path at this point.
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
---
fs/btrfs/ioctl.c | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 7cf0133..fc9525f 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -498,14 +498,16 @@ static int create_snapshot(struct btrfs_root *root, struct dentry *dentry,
if (ret)
goto fail;
+ ret = 0;
inode = btrfs_lookup_dentry(dentry->d_parent->d_inode, dentry);
if (IS_ERR(inode)) {
ret = PTR_ERR(inode);
goto fail;
- }
- BUG_ON(!inode);
+ } else if (inode == NULL)
+ ret = -ENOENT;
+
d_instantiate(dentry, inode);
- ret = 0;
+
fail:
kfree(pending_snapshot);
return ret;
--
1.7.6
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] btrfs: Handle NULL inode return from btrfs_lookup_dentry()
2011-08-05 16:48 [PATCH] btrfs: Handle NULL inode return from btrfs_lookup_dentry() Mark Fasheh
@ 2011-08-09 4:45 ` Tsutomu Itoh
0 siblings, 0 replies; 2+ messages in thread
From: Tsutomu Itoh @ 2011-08-09 4:45 UTC (permalink / raw)
To: Mark Fasheh; +Cc: linux-btrfs, chris.mason
Hi, Mark,
(2011/08/06 1:48), Mark Fasheh wrote:
> Right now in create_snapshot(), we'll BUG() if btrfs_lookup_dentry() returns
> a NULL inode (negative dentry). Getting a negative dentry here probably
> isn't ever expected to happen however two things lead me to believe that we
> should trap this anyway:
>
> - I don't see any possiblity of serious fs corruption from handling the
> error. I do wonder though if we could have an "orphaned" snapshot? Even
> if we did that doesn't strike me as needing to crash the machine. (Q:
> Perhaps going read-only is the eventual solution here?)
>
> - It's very trivial to pass an -ENOENT back to userspace as we're pretty
> high up the call path at this point.
I have already posted the same purpose patch. Please look at the following.
http://marc.info/?l=linux-btrfs&m=130932339824237&w=2
Thanks,
Tsutomu
>
> Signed-off-by: Mark Fasheh <mfasheh@suse.com>
> ---
> fs/btrfs/ioctl.c | 8 +++++---
> 1 files changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
> index 7cf0133..fc9525f 100644
> --- a/fs/btrfs/ioctl.c
> +++ b/fs/btrfs/ioctl.c
> @@ -498,14 +498,16 @@ static int create_snapshot(struct btrfs_root *root, struct dentry *dentry,
> if (ret)
> goto fail;
>
> + ret = 0;
> inode = btrfs_lookup_dentry(dentry->d_parent->d_inode, dentry);
> if (IS_ERR(inode)) {
> ret = PTR_ERR(inode);
> goto fail;
> - }
> - BUG_ON(!inode);
> + } else if (inode == NULL)
> + ret = -ENOENT;
> +
> d_instantiate(dentry, inode);
> - ret = 0;
> +
> fail:
> kfree(pending_snapshot);
> return ret;
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-08-09 4:45 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-08-05 16:48 [PATCH] btrfs: Handle NULL inode return from btrfs_lookup_dentry() Mark Fasheh
2011-08-09 4:45 ` Tsutomu Itoh
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.