mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
rpc_create_*_dir: don't bother with qstr
just pass the name Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
e9a17bd73a
commit
a95e691f9c
4 changed files with 23 additions and 33 deletions
|
@ -73,12 +73,12 @@ extern ssize_t rpc_pipe_generic_upcall(struct file *, struct rpc_pipe_msg *,
|
||||||
extern int rpc_queue_upcall(struct rpc_pipe *, struct rpc_pipe_msg *);
|
extern int rpc_queue_upcall(struct rpc_pipe *, struct rpc_pipe_msg *);
|
||||||
|
|
||||||
struct rpc_clnt;
|
struct rpc_clnt;
|
||||||
extern struct dentry *rpc_create_client_dir(struct dentry *, struct qstr *, struct rpc_clnt *);
|
extern struct dentry *rpc_create_client_dir(struct dentry *, const char *, struct rpc_clnt *);
|
||||||
extern int rpc_remove_client_dir(struct dentry *);
|
extern int rpc_remove_client_dir(struct dentry *);
|
||||||
|
|
||||||
struct cache_detail;
|
struct cache_detail;
|
||||||
extern struct dentry *rpc_create_cache_dir(struct dentry *,
|
extern struct dentry *rpc_create_cache_dir(struct dentry *,
|
||||||
struct qstr *,
|
const char *,
|
||||||
umode_t umode,
|
umode_t umode,
|
||||||
struct cache_detail *);
|
struct cache_detail *);
|
||||||
extern void rpc_remove_cache_dir(struct dentry *);
|
extern void rpc_remove_cache_dir(struct dentry *);
|
||||||
|
|
|
@ -1812,19 +1812,11 @@ int sunrpc_cache_register_pipefs(struct dentry *parent,
|
||||||
const char *name, umode_t umode,
|
const char *name, umode_t umode,
|
||||||
struct cache_detail *cd)
|
struct cache_detail *cd)
|
||||||
{
|
{
|
||||||
struct qstr q;
|
struct dentry *dir = rpc_create_cache_dir(parent, name, umode, cd);
|
||||||
struct dentry *dir;
|
if (IS_ERR(dir))
|
||||||
int ret = 0;
|
return PTR_ERR(dir);
|
||||||
|
cd->u.pipefs.dir = dir;
|
||||||
q.name = name;
|
return 0;
|
||||||
q.len = strlen(name);
|
|
||||||
q.hash = full_name_hash(q.name, q.len);
|
|
||||||
dir = rpc_create_cache_dir(parent, &q, umode, cd);
|
|
||||||
if (!IS_ERR(dir))
|
|
||||||
cd->u.pipefs.dir = dir;
|
|
||||||
else
|
|
||||||
ret = PTR_ERR(dir);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(sunrpc_cache_register_pipefs);
|
EXPORT_SYMBOL_GPL(sunrpc_cache_register_pipefs);
|
||||||
|
|
||||||
|
|
|
@ -128,9 +128,7 @@ static struct dentry *rpc_setup_pipedir_sb(struct super_block *sb,
|
||||||
{
|
{
|
||||||
static uint32_t clntid;
|
static uint32_t clntid;
|
||||||
char name[15];
|
char name[15];
|
||||||
struct qstr q = { .name = name };
|
|
||||||
struct dentry *dir, *dentry;
|
struct dentry *dir, *dentry;
|
||||||
int error;
|
|
||||||
|
|
||||||
dir = rpc_d_lookup_sb(sb, dir_name);
|
dir = rpc_d_lookup_sb(sb, dir_name);
|
||||||
if (dir == NULL) {
|
if (dir == NULL) {
|
||||||
|
@ -138,19 +136,17 @@ static struct dentry *rpc_setup_pipedir_sb(struct super_block *sb,
|
||||||
return dir;
|
return dir;
|
||||||
}
|
}
|
||||||
for (;;) {
|
for (;;) {
|
||||||
q.len = snprintf(name, sizeof(name), "clnt%x", (unsigned int)clntid++);
|
snprintf(name, sizeof(name), "clnt%x", (unsigned int)clntid++);
|
||||||
name[sizeof(name) - 1] = '\0';
|
name[sizeof(name) - 1] = '\0';
|
||||||
q.hash = full_name_hash(q.name, q.len);
|
dentry = rpc_create_client_dir(dir, name, clnt);
|
||||||
dentry = rpc_create_client_dir(dir, &q, clnt);
|
|
||||||
if (!IS_ERR(dentry))
|
if (!IS_ERR(dentry))
|
||||||
break;
|
break;
|
||||||
error = PTR_ERR(dentry);
|
if (dentry == ERR_PTR(-EEXIST))
|
||||||
if (error != -EEXIST) {
|
continue;
|
||||||
printk(KERN_INFO "RPC: Couldn't create pipefs entry"
|
printk(KERN_INFO "RPC: Couldn't create pipefs entry"
|
||||||
" %s/%s, error %d\n",
|
" %s/%s, error %ld\n",
|
||||||
dir_name, name, error);
|
dir_name, name, PTR_ERR(dentry));
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
dput(dir);
|
dput(dir);
|
||||||
return dentry;
|
return dentry;
|
||||||
|
|
|
@ -770,15 +770,17 @@ out_bad:
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct dentry *rpc_mkdir_populate(struct dentry *parent,
|
static struct dentry *rpc_mkdir_populate(struct dentry *parent,
|
||||||
struct qstr *name, umode_t mode, void *private,
|
const char *name, umode_t mode, void *private,
|
||||||
int (*populate)(struct dentry *, void *), void *args_populate)
|
int (*populate)(struct dentry *, void *), void *args_populate)
|
||||||
{
|
{
|
||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
|
struct qstr q = QSTR_INIT(name, strlen(name));
|
||||||
struct inode *dir = parent->d_inode;
|
struct inode *dir = parent->d_inode;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
|
q.hash = full_name_hash(q.name, q.len);
|
||||||
mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT);
|
mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT);
|
||||||
dentry = __rpc_lookup_create_exclusive(parent, name);
|
dentry = __rpc_lookup_create_exclusive(parent, &q);
|
||||||
if (IS_ERR(dentry))
|
if (IS_ERR(dentry))
|
||||||
goto out;
|
goto out;
|
||||||
error = __rpc_mkdir(dir, dentry, mode, NULL, private);
|
error = __rpc_mkdir(dir, dentry, mode, NULL, private);
|
||||||
|
@ -925,8 +927,8 @@ static void rpc_clntdir_depopulate(struct dentry *dentry)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rpc_create_client_dir - Create a new rpc_client directory in rpc_pipefs
|
* rpc_create_client_dir - Create a new rpc_client directory in rpc_pipefs
|
||||||
* @dentry: dentry from the rpc_pipefs root to the new directory
|
* @dentry: the parent of new directory
|
||||||
* @name: &struct qstr for the name
|
* @name: the name of new directory
|
||||||
* @rpc_client: rpc client to associate with this directory
|
* @rpc_client: rpc client to associate with this directory
|
||||||
*
|
*
|
||||||
* This creates a directory at the given @path associated with
|
* This creates a directory at the given @path associated with
|
||||||
|
@ -935,7 +937,7 @@ static void rpc_clntdir_depopulate(struct dentry *dentry)
|
||||||
* later be created using rpc_mkpipe().
|
* later be created using rpc_mkpipe().
|
||||||
*/
|
*/
|
||||||
struct dentry *rpc_create_client_dir(struct dentry *dentry,
|
struct dentry *rpc_create_client_dir(struct dentry *dentry,
|
||||||
struct qstr *name,
|
const char *name,
|
||||||
struct rpc_clnt *rpc_client)
|
struct rpc_clnt *rpc_client)
|
||||||
{
|
{
|
||||||
return rpc_mkdir_populate(dentry, name, S_IRUGO | S_IXUGO, NULL,
|
return rpc_mkdir_populate(dentry, name, S_IRUGO | S_IXUGO, NULL,
|
||||||
|
@ -981,7 +983,7 @@ static void rpc_cachedir_depopulate(struct dentry *dentry)
|
||||||
rpc_depopulate(dentry, cache_pipefs_files, 0, 3);
|
rpc_depopulate(dentry, cache_pipefs_files, 0, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct dentry *rpc_create_cache_dir(struct dentry *parent, struct qstr *name,
|
struct dentry *rpc_create_cache_dir(struct dentry *parent, const char *name,
|
||||||
umode_t umode, struct cache_detail *cd)
|
umode_t umode, struct cache_detail *cd)
|
||||||
{
|
{
|
||||||
return rpc_mkdir_populate(parent, name, umode, NULL,
|
return rpc_mkdir_populate(parent, name, umode, NULL,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue