qib_fs: switch to simple_recursive_removal()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
a38fd87484
commit
e41d237818
1 changed files with 5 additions and 63 deletions
|
@ -427,79 +427,21 @@ bail:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int remove_file(struct dentry *parent, char *name)
|
|
||||||
{
|
|
||||||
struct dentry *tmp;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
tmp = lookup_one_len(name, parent, strlen(name));
|
|
||||||
|
|
||||||
if (IS_ERR(tmp)) {
|
|
||||||
ret = PTR_ERR(tmp);
|
|
||||||
goto bail;
|
|
||||||
}
|
|
||||||
|
|
||||||
spin_lock(&tmp->d_lock);
|
|
||||||
if (simple_positive(tmp)) {
|
|
||||||
__d_drop(tmp);
|
|
||||||
spin_unlock(&tmp->d_lock);
|
|
||||||
simple_unlink(d_inode(parent), tmp);
|
|
||||||
} else {
|
|
||||||
spin_unlock(&tmp->d_lock);
|
|
||||||
}
|
|
||||||
dput(tmp);
|
|
||||||
|
|
||||||
ret = 0;
|
|
||||||
bail:
|
|
||||||
/*
|
|
||||||
* We don't expect clients to care about the return value, but
|
|
||||||
* it's there if they need it.
|
|
||||||
*/
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int remove_device_files(struct super_block *sb,
|
static int remove_device_files(struct super_block *sb,
|
||||||
struct qib_devdata *dd)
|
struct qib_devdata *dd)
|
||||||
{
|
{
|
||||||
struct dentry *dir, *root;
|
struct dentry *dir;
|
||||||
char unit[10];
|
char unit[10];
|
||||||
int ret, i;
|
|
||||||
|
|
||||||
root = dget(sb->s_root);
|
|
||||||
inode_lock(d_inode(root));
|
|
||||||
snprintf(unit, sizeof(unit), "%u", dd->unit);
|
snprintf(unit, sizeof(unit), "%u", dd->unit);
|
||||||
dir = lookup_one_len(unit, root, strlen(unit));
|
dir = lookup_one_len_unlocked(unit, sb->s_root, strlen(unit));
|
||||||
|
|
||||||
if (IS_ERR(dir)) {
|
if (IS_ERR(dir)) {
|
||||||
ret = PTR_ERR(dir);
|
|
||||||
pr_err("Lookup of %s failed\n", unit);
|
pr_err("Lookup of %s failed\n", unit);
|
||||||
goto bail;
|
return PTR_ERR(dir);
|
||||||
}
|
}
|
||||||
|
simple_recursive_removal(dir, NULL);
|
||||||
inode_lock(d_inode(dir));
|
return 0;
|
||||||
remove_file(dir, "counters");
|
|
||||||
remove_file(dir, "counter_names");
|
|
||||||
remove_file(dir, "portcounter_names");
|
|
||||||
for (i = 0; i < dd->num_pports; i++) {
|
|
||||||
char fname[24];
|
|
||||||
|
|
||||||
sprintf(fname, "port%dcounters", i + 1);
|
|
||||||
remove_file(dir, fname);
|
|
||||||
if (dd->flags & QIB_HAS_QSFP) {
|
|
||||||
sprintf(fname, "qsfp%d", i + 1);
|
|
||||||
remove_file(dir, fname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
remove_file(dir, "flash");
|
|
||||||
inode_unlock(d_inode(dir));
|
|
||||||
ret = simple_rmdir(d_inode(root), dir);
|
|
||||||
d_drop(dir);
|
|
||||||
dput(dir);
|
|
||||||
|
|
||||||
bail:
|
|
||||||
inode_unlock(d_inode(root));
|
|
||||||
dput(root);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Reference in a new issue