Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 158572
b: refs/heads/master
c: e57aed7
h: refs/heads/master
v: v3
  • Loading branch information
Trond Myklebust authored and Trond Myklebust committed Aug 9, 2009
1 parent ee4b016 commit a5dd9bb
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 29 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 23ac6581702ac6d029643328a7e6ea3baf834c5e
refs/heads/master: e57aed77ad48d28ac617ba157ad2f665f5301b30
78 changes: 50 additions & 28 deletions trunk/net/sunrpc/rpc_pipe.c
Original file line number Diff line number Diff line change
Expand Up @@ -406,19 +406,6 @@ struct rpc_filelist {
umode_t mode;
};

enum {
RPCAUTH_info,
RPCAUTH_EOF
};

static const struct rpc_filelist authfiles[] = {
[RPCAUTH_info] = {
.name = "info",
.i_fop = &rpc_info_operations,
.mode = S_IFREG | S_IRUSR,
},
};

struct vfsmount *rpc_get_mount(void)
{
int err;
Expand Down Expand Up @@ -698,8 +685,9 @@ static int rpc_populate(struct dentry *parent,
return err;
}

struct dentry *rpc_mkdir_populate(struct dentry *parent,
struct qstr *name, umode_t mode, void *private)
static struct dentry *rpc_mkdir_populate(struct dentry *parent,
struct qstr *name, umode_t mode, void *private,
int (*populate)(struct dentry *, void *), void *args_populate)
{
struct dentry *dentry;
struct inode *dir = parent->d_inode;
Expand All @@ -712,10 +700,11 @@ struct dentry *rpc_mkdir_populate(struct dentry *parent,
error = __rpc_mkdir(dir, dentry, mode, NULL, private);
if (error != 0)
goto out_err;
error = rpc_populate(dentry, authfiles,
RPCAUTH_info, RPCAUTH_EOF, private);
if (error)
goto err_rmdir;
if (populate != NULL) {
error = populate(dentry, args_populate);
if (error)
goto err_rmdir;
}
out:
mutex_unlock(&dir->i_mutex);
return dentry;
Expand All @@ -726,11 +715,8 @@ struct dentry *rpc_mkdir_populate(struct dentry *parent,
goto out;
}

/**
* rpc_remove_client_dir - Remove a directory created with rpc_create_client_dir()
* @dentry: directory to remove
*/
int rpc_remove_client_dir(struct dentry *dentry)
static int rpc_rmdir_depopulate(struct dentry *dentry,
void (*depopulate)(struct dentry *))
{
struct dentry *parent;
struct inode *dir;
Expand All @@ -739,7 +725,8 @@ int rpc_remove_client_dir(struct dentry *dentry)
parent = dget_parent(dentry);
dir = parent->d_inode;
mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT);
rpc_depopulate(dentry, authfiles, RPCAUTH_info, RPCAUTH_EOF);
if (depopulate != NULL)
depopulate(dentry);
error = __rpc_rmdir(dir, dentry);
mutex_unlock(&dir->i_mutex);
dput(parent);
Expand Down Expand Up @@ -843,6 +830,31 @@ rpc_unlink(struct dentry *dentry)
}
EXPORT_SYMBOL_GPL(rpc_unlink);

enum {
RPCAUTH_info,
RPCAUTH_EOF
};

static const struct rpc_filelist authfiles[] = {
[RPCAUTH_info] = {
.name = "info",
.i_fop = &rpc_info_operations,
.mode = S_IFREG | S_IRUSR,
},
};

static int rpc_clntdir_populate(struct dentry *dentry, void *private)
{
return rpc_populate(dentry,
authfiles, RPCAUTH_info, RPCAUTH_EOF,
private);
}

static void rpc_clntdir_depopulate(struct dentry *dentry)
{
rpc_depopulate(dentry, authfiles, RPCAUTH_info, RPCAUTH_EOF);
}

/**
* rpc_create_client_dir - Create a new rpc_client directory in rpc_pipefs
* @path: path from the rpc_pipefs root to the new directory
Expand All @@ -854,10 +866,20 @@ EXPORT_SYMBOL_GPL(rpc_unlink);
* later be created using rpc_mkpipe().
*/
struct dentry *rpc_create_client_dir(struct dentry *dentry,
struct qstr *name,
struct rpc_clnt *rpc_client)
struct qstr *name,
struct rpc_clnt *rpc_client)
{
return rpc_mkdir_populate(dentry, name, S_IRUGO | S_IXUGO, NULL,
rpc_clntdir_populate, rpc_client);
}

/**
* rpc_remove_client_dir - Remove a directory created with rpc_create_client_dir()
* @dentry: directory to remove
*/
int rpc_remove_client_dir(struct dentry *dentry)
{
return rpc_mkdir_populate(dentry, name, S_IRUGO | S_IXUGO, rpc_client);
return rpc_rmdir_depopulate(dentry, rpc_clntdir_depopulate);
}

/*
Expand Down

0 comments on commit a5dd9bb

Please sign in to comment.