diff options
author | trz <trz> | 2005-10-19 14:20:38 +0000 |
---|---|---|
committer | trz <trz> | 2005-10-19 14:20:38 +0000 |
commit | 0e1e055939eb528f1d2ec28b47faf6dd12ede0fa (patch) | |
tree | 01800f773443cb076b1d33864517e3fae38e2509 | |
parent | ce3187ac2f3f71f348fd7d4694b49c44f42337f3 (diff) | |
download | systemtap-steved-0e1e055939eb528f1d2ec28b47faf6dd12ede0fa.tar.gz systemtap-steved-0e1e055939eb528f1d2ec28b47faf6dd12ede0fa.tar.xz systemtap-steved-0e1e055939eb528f1d2ec28b47faf6dd12ede0fa.zip |
bugfix patch applied
-rw-r--r-- | runtime/relayfs/ChangeLog | 5 | ||||
-rw-r--r-- | runtime/relayfs/inode.c | 28 |
2 files changed, 24 insertions, 9 deletions
diff --git a/runtime/relayfs/ChangeLog b/runtime/relayfs/ChangeLog index 13fcdc42..09f237a2 100644 --- a/runtime/relayfs/ChangeLog +++ b/runtime/relayfs/ChangeLog @@ -1,3 +1,8 @@ +2005-10-19 Tom Zanussi <zanussi@us.ibm.com> + + * inode.c (relayfs_remove): Applied patch + [PATCH 2.6.13-rc6-mm2] relayfs: relayfs_remove fix + 2005-10-14 Tom Zanussi <zanussi@us.ibm.com> * buffers.c (relay_alloc_buf): Applied patch diff --git a/runtime/relayfs/inode.c b/runtime/relayfs/inode.c index 3bff01e2..26faf9fb 100644 --- a/runtime/relayfs/inode.c +++ b/runtime/relayfs/inode.c @@ -198,26 +198,39 @@ struct dentry *relayfs_create_dir(const char *name, struct dentry *parent) /** * relayfs_remove - remove a file or directory in the relay filesystem * @dentry: file or directory dentry + * + * Returns 0 if successful, negative otherwise. */ int relayfs_remove(struct dentry *dentry) { - struct dentry *parent = dentry->d_parent; + struct dentry *parent; + int error = 0; + + if (!dentry) + return -EINVAL; + parent = dentry->d_parent; if (!parent) return -EINVAL; parent = dget(parent); down(&parent->d_inode->i_sem); if (dentry->d_inode) { - simple_unlink(parent->d_inode, dentry); - d_delete(dentry); + if (S_ISDIR(dentry->d_inode->i_mode)) + error = simple_rmdir(parent->d_inode, dentry); + else + error = simple_unlink(parent->d_inode, dentry); + if (!error) + d_delete(dentry); } - dput(dentry); + if (!error) + dput(dentry); up(&parent->d_inode->i_sem); dput(parent); - simple_release_fs(&relayfs_mount, &relayfs_mount_count); + if (!error) + simple_release_fs(&relayfs_mount, &relayfs_mount_count); - return 0; + return error; } /** @@ -228,9 +241,6 @@ int relayfs_remove(struct dentry *dentry) */ int relayfs_remove_dir(struct dentry *dentry) { - if (!dentry) - return -EINVAL; - return relayfs_remove(dentry); } |