|
@@ -1666,7 +1666,8 @@ error:
|
|
|
}
|
|
|
EXPORT_SYMBOL(p9_client_statfs);
|
|
|
|
|
|
-int p9_client_rename(struct p9_fid *fid, struct p9_fid *newdirfid, char *name)
|
|
|
+int p9_client_rename(struct p9_fid *fid,
|
|
|
+ struct p9_fid *newdirfid, const char *name)
|
|
|
{
|
|
|
int err;
|
|
|
struct p9_req_t *req;
|
|
@@ -1693,6 +1694,36 @@ error:
|
|
|
}
|
|
|
EXPORT_SYMBOL(p9_client_rename);
|
|
|
|
|
|
+int p9_client_renameat(struct p9_fid *olddirfid, const char *old_name,
|
|
|
+ struct p9_fid *newdirfid, const char *new_name)
|
|
|
+{
|
|
|
+ int err;
|
|
|
+ struct p9_req_t *req;
|
|
|
+ struct p9_client *clnt;
|
|
|
+
|
|
|
+ err = 0;
|
|
|
+ clnt = olddirfid->clnt;
|
|
|
+
|
|
|
+ P9_DPRINTK(P9_DEBUG_9P, ">>> TRENAMEAT olddirfid %d old name %s"
|
|
|
+ " newdirfid %d new name %s\n", olddirfid->fid, old_name,
|
|
|
+ newdirfid->fid, new_name);
|
|
|
+
|
|
|
+ req = p9_client_rpc(clnt, P9_TRENAMEAT, "dsds", olddirfid->fid,
|
|
|
+ old_name, newdirfid->fid, new_name);
|
|
|
+ if (IS_ERR(req)) {
|
|
|
+ err = PTR_ERR(req);
|
|
|
+ goto error;
|
|
|
+ }
|
|
|
+
|
|
|
+ P9_DPRINTK(P9_DEBUG_9P, "<<< RRENAMEAT newdirfid %d new name %s\n",
|
|
|
+ newdirfid->fid, new_name);
|
|
|
+
|
|
|
+ p9_free_req(clnt, req);
|
|
|
+error:
|
|
|
+ return err;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(p9_client_renameat);
|
|
|
+
|
|
|
/*
|
|
|
* An xattrwalk without @attr_name gives the fid for the lisxattr namespace
|
|
|
*/
|