diff options
Diffstat (limited to 'include/net/9p/client.h')
| -rw-r--r-- | include/net/9p/client.h | 53 | 
1 files changed, 29 insertions, 24 deletions
diff --git a/include/net/9p/client.h b/include/net/9p/client.h index 83ba6a4d58a..6fab66c5c5a 100644 --- a/include/net/9p/client.h +++ b/include/net/9p/client.h @@ -26,6 +26,8 @@  #ifndef NET_9P_CLIENT_H  #define NET_9P_CLIENT_H +#include <linux/utsname.h> +  /* Number of requests per row */  #define P9_ROW_MAXTAG 255 @@ -36,9 +38,9 @@   */  enum p9_proto_versions{ -	p9_proto_legacy = 0, -	p9_proto_2000u = 1, -	p9_proto_2000L = 2, +	p9_proto_legacy, +	p9_proto_2000u, +	p9_proto_2000L,  }; @@ -60,12 +62,11 @@ enum p9_trans_status {  };  /** - * enum p9_req_status_t - virtio request status + * enum p9_req_status_t - status of a request   * @REQ_STATUS_IDLE: request slot unused   * @REQ_STATUS_ALLOC: request has been allocated but not sent   * @REQ_STATUS_UNSENT: request waiting to be sent   * @REQ_STATUS_SENT: request sent to server - * @REQ_STATUS_FLSH: a flush has been sent for this request   * @REQ_STATUS_RCVD: response received from server   * @REQ_STATUS_FLSHD: request has been flushed   * @REQ_STATUS_ERROR: request encountered an error on the client side @@ -81,7 +82,6 @@ enum p9_req_status_t {  	REQ_STATUS_ALLOC,  	REQ_STATUS_UNSENT,  	REQ_STATUS_SENT, -	REQ_STATUS_FLSH,  	REQ_STATUS_RCVD,  	REQ_STATUS_FLSHD,  	REQ_STATUS_ERROR, @@ -101,7 +101,7 @@ enum p9_req_status_t {   * Transport use an array to track outstanding requests   * instead of a list.  While this may incurr overhead during initial   * allocation or expansion, it makes request lookup much easier as the - * tag id is a index into an array.  (We use tag+1 so that we can accomodate + * tag id is a index into an array.  (We use tag+1 so that we can accommodate   * the -1 tag for the T_VERSION request).   * This also has the nice effect of only having to allocate wait_queues   * once, instead of constantly allocating and freeing them.  Its possible @@ -128,12 +128,12 @@ struct p9_req_t {   * @proto_version: 9P protocol version to use   * @trans_mod: module API instantiated with this client   * @trans: tranport instance state and API - * @conn: connection state information used by trans_fd   * @fidpool: fid handle accounting for session   * @fidlist: List of active fid handles   * @tagpool - transaction id accounting for session   * @reqs - 2D array of requests   * @max_tag - current maximum tag id allocated + * @name - node name used as client id   *   * The client structure is used to keep track of various per-client   * state that has been instantiated. @@ -151,12 +151,11 @@ struct p9_req_t {  struct p9_client {  	spinlock_t lock; /* protect client structure */ -	int msize; +	unsigned int msize;  	unsigned char proto_version;  	struct p9_trans_module *trans_mod;  	enum p9_trans_status status;  	void *trans; -	struct p9_conn *conn;  	struct p9_idpool *fidpool;  	struct list_head fidlist; @@ -164,6 +163,8 @@ struct p9_client {  	struct p9_idpool *tagpool;  	struct p9_req_t *reqs[P9_ROW_MAXTAG];  	int max_tag; + +	char name[__NEW_UTS_LEN + 1];  };  /** @@ -187,12 +188,12 @@ struct p9_fid {  	int mode;  	struct p9_qid qid;  	u32 iounit; -	uid_t uid; +	kuid_t uid;  	void *rdir;  	struct list_head flist; -	struct list_head dlist;	/* list of all fids attached to a dentry */ +	struct hlist_node dlist;	/* list of all fids attached to a dentry */  };  /** @@ -211,33 +212,37 @@ struct p9_dirent {  };  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_rename(struct p9_fid *fid, struct p9_fid *newdirfid, +		     const char *name); +int p9_client_renameat(struct p9_fid *olddirfid, const char *old_name, +		       struct p9_fid *newdirfid, const char *new_name);  struct p9_client *p9_client_create(const char *dev_name, char *options);  void p9_client_destroy(struct p9_client *clnt);  void p9_client_disconnect(struct p9_client *clnt);  void p9_client_begin_disconnect(struct p9_client *clnt);  struct p9_fid *p9_client_attach(struct p9_client *clnt, struct p9_fid *afid, -					char *uname, u32 n_uname, char *aname); -struct p9_fid *p9_client_walk(struct p9_fid *oldfid, int nwname, char **wnames, -								int clone); +				char *uname, kuid_t n_uname, char *aname); +struct p9_fid *p9_client_walk(struct p9_fid *oldfid, uint16_t nwname, +		char **wnames, int clone);  int p9_client_open(struct p9_fid *fid, int mode);  int p9_client_fcreate(struct p9_fid *fid, char *name, u32 perm, int mode,  							char *extension);  int p9_client_link(struct p9_fid *fid, struct p9_fid *oldfid, char *newname); -int p9_client_symlink(struct p9_fid *fid, char *name, char *symname, gid_t gid, +int p9_client_symlink(struct p9_fid *fid, char *name, char *symname, kgid_t gid,  							struct p9_qid *qid);  int p9_client_create_dotl(struct p9_fid *ofid, char *name, u32 flags, u32 mode, -		gid_t gid, struct p9_qid *qid); +		kgid_t gid, struct p9_qid *qid);  int p9_client_clunk(struct p9_fid *fid);  int p9_client_fsync(struct p9_fid *fid, int datasync);  int p9_client_remove(struct p9_fid *fid); +int p9_client_unlinkat(struct p9_fid *dfid, const char *name, int flags);  int p9_client_read(struct p9_fid *fid, char *data, char __user *udata,  							u64 offset, u32 count);  int p9_client_write(struct p9_fid *fid, char *data, const char __user *udata,  							u64 offset, u32 count);  int p9_client_readdir(struct p9_fid *fid, char *data, u32 count, u64 offset); -int p9dirent_read(char *buf, int len, struct p9_dirent *dirent, -							int proto_version); +int p9dirent_read(struct p9_client *clnt, char *buf, int len, +		  struct p9_dirent *dirent);  struct p9_wstat *p9_client_stat(struct p9_fid *fid);  int p9_client_wstat(struct p9_fid *fid, struct p9_wstat *wst);  int p9_client_setattr(struct p9_fid *fid, struct p9_iattr_dotl *attr); @@ -246,16 +251,16 @@ struct p9_stat_dotl *p9_client_getattr_dotl(struct p9_fid *fid,  							u64 request_mask);  int p9_client_mknod_dotl(struct p9_fid *oldfid, char *name, int mode, -			dev_t rdev, gid_t gid, struct p9_qid *); +			dev_t rdev, kgid_t gid, struct p9_qid *);  int p9_client_mkdir_dotl(struct p9_fid *fid, char *name, int mode, -				gid_t gid, struct p9_qid *); +				kgid_t gid, struct p9_qid *);  int p9_client_lock_dotl(struct p9_fid *fid, struct p9_flock *flock, u8 *status);  int p9_client_getlock_dotl(struct p9_fid *fid, struct p9_getlock *fl);  struct p9_req_t *p9_tag_lookup(struct p9_client *, u16); -void p9_client_cb(struct p9_client *c, struct p9_req_t *req); +void p9_client_cb(struct p9_client *c, struct p9_req_t *req, int status);  int p9_parse_header(struct p9_fcall *, int32_t *, int8_t *, int16_t *, int); -int p9stat_read(char *, int, struct p9_wstat *, int); +int p9stat_read(struct p9_client *, char *, int, struct p9_wstat *);  void p9stat_free(struct p9_wstat *);  int p9_is_proto_dotu(struct p9_client *clnt);  | 
