Commit 4681dbda authored by Sripathi Kodi's avatar Sripathi Kodi Committed by Eric Van Hensbergen

9p: add 9P2000.L rename operation

I made a V2 of this patch on top of my patches for VFS switches.
All the changes were due to change in some offsets.

rename - change name of file or directory

size[4] Trename tag[2] fid[4] newdirfid[4] name[s]
size[4] Rrename tag[2]

The rename message is used to change the name of a file, possibly moving it
to a new directory.  The 9P wstat message can only rename a file within the
same directory.
Signed-off-by: default avatarJim Garlick <garlick@llnl.gov>
Signed-off-by: default avatarSripathi Kodi <sripathik@in.ibm.com>
Signed-off-by: default avatarEric Van Hensbergen <ericvh@gmail.com>
parent bda8e775
...@@ -794,6 +794,13 @@ v9fs_vfs_rename(struct inode *old_dir, struct dentry *old_dentry, ...@@ -794,6 +794,13 @@ v9fs_vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
goto clunk_olddir; goto clunk_olddir;
} }
if (v9fs_proto_dotl(v9ses)) {
retval = p9_client_rename(oldfid, newdirfid,
(char *) new_dentry->d_name.name);
if (retval != -ENOSYS)
goto clunk_newdir;
}
/* 9P can only handle file rename in the same directory */ /* 9P can only handle file rename in the same directory */
if (memcmp(&olddirfid->qid, &newdirfid->qid, sizeof(newdirfid->qid))) { if (memcmp(&olddirfid->qid, &newdirfid->qid, sizeof(newdirfid->qid))) {
P9_DPRINTK(P9_DEBUG_ERROR, P9_DPRINTK(P9_DEBUG_ERROR,
......
...@@ -88,6 +88,8 @@ do { \ ...@@ -88,6 +88,8 @@ do { \
* enum p9_msg_t - 9P message types * enum p9_msg_t - 9P message types
* @P9_TSTATFS: file system status request * @P9_TSTATFS: file system status request
* @P9_RSTATFS: file system status response * @P9_RSTATFS: file system status response
* @P9_TRENAME: rename request
* @P9_RRENAME: rename response
* @P9_TVERSION: version handshake request * @P9_TVERSION: version handshake request
* @P9_RVERSION: version handshake response * @P9_RVERSION: version handshake response
* @P9_TAUTH: request to establish authentication channel * @P9_TAUTH: request to establish authentication channel
...@@ -129,6 +131,8 @@ do { \ ...@@ -129,6 +131,8 @@ do { \
enum p9_msg_t { enum p9_msg_t {
P9_TSTATFS = 8, P9_TSTATFS = 8,
P9_RSTATFS, P9_RSTATFS,
P9_TRENAME = 20,
P9_RRENAME,
P9_TVERSION = 100, P9_TVERSION = 100,
P9_RVERSION, P9_RVERSION,
P9_TAUTH = 102, P9_TAUTH = 102,
...@@ -370,6 +374,15 @@ struct p9_rstatfs { ...@@ -370,6 +374,15 @@ struct p9_rstatfs {
u32 namelen; u32 namelen;
}; };
struct p9_trename {
u32 fid;
u32 newdirfid;
struct p9_str name;
};
struct p9_rrename {
};
struct p9_tversion { struct p9_tversion {
u32 msize; u32 msize;
struct p9_str version; struct p9_str version;
......
...@@ -196,6 +196,7 @@ struct p9_fid { ...@@ -196,6 +196,7 @@ struct p9_fid {
}; };
int p9_client_statfs(struct p9_fid *fid, struct p9_rstatfs *sb); int p9_client_statfs(struct p9_fid *fid, struct p9_rstatfs *sb);
int p9_client_rename(struct p9_fid *fid, struct p9_fid *newdirfid, char *name);
int p9_client_version(struct p9_client *); int p9_client_version(struct p9_client *);
struct p9_client *p9_client_create(const char *dev_name, char *options); struct p9_client *p9_client_create(const char *dev_name, char *options);
void p9_client_destroy(struct p9_client *clnt); void p9_client_destroy(struct p9_client *clnt);
......
...@@ -1404,3 +1404,31 @@ int p9_client_statfs(struct p9_fid *fid, struct p9_rstatfs *sb) ...@@ -1404,3 +1404,31 @@ int p9_client_statfs(struct p9_fid *fid, struct p9_rstatfs *sb)
return err; return err;
} }
EXPORT_SYMBOL(p9_client_statfs); EXPORT_SYMBOL(p9_client_statfs);
int p9_client_rename(struct p9_fid *fid, struct p9_fid *newdirfid, char *name)
{
int err;
struct p9_req_t *req;
struct p9_client *clnt;
err = 0;
clnt = fid->clnt;
P9_DPRINTK(P9_DEBUG_9P, ">>> TRENAME fid %d newdirfid %d name %s\n",
fid->fid, newdirfid->fid, name);
req = p9_client_rpc(clnt, P9_TRENAME, "dds", fid->fid,
newdirfid->fid, name);
if (IS_ERR(req)) {
err = PTR_ERR(req);
goto error;
}
P9_DPRINTK(P9_DEBUG_9P, "<<< RRENAME fid %d\n", fid->fid);
p9_free_req(clnt, req);
error:
return err;
}
EXPORT_SYMBOL(p9_client_rename);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment