This source file includes following definitions.
- p9_req_get
- p9_req_try_get
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 #ifndef NET_9P_CLIENT_H
  12 #define NET_9P_CLIENT_H
  13 
  14 #include <linux/utsname.h>
  15 #include <linux/idr.h>
  16 
  17 
  18 #define P9_ROW_MAXTAG 255
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 enum p9_proto_versions{
  27         p9_proto_legacy,
  28         p9_proto_2000u,
  29         p9_proto_2000L,
  30 };
  31 
  32 
  33 
  34 
  35 
  36 
  37 
  38 
  39 
  40 
  41 
  42 
  43 enum p9_trans_status {
  44         Connected,
  45         BeginDisconnect,
  46         Disconnected,
  47         Hung,
  48 };
  49 
  50 
  51 
  52 
  53 
  54 
  55 
  56 
  57 
  58 
  59 
  60 enum p9_req_status_t {
  61         REQ_STATUS_ALLOC,
  62         REQ_STATUS_UNSENT,
  63         REQ_STATUS_SENT,
  64         REQ_STATUS_RCVD,
  65         REQ_STATUS_FLSHD,
  66         REQ_STATUS_ERROR,
  67 };
  68 
  69 
  70 
  71 
  72 
  73 
  74 
  75 
  76 
  77 
  78 
  79 struct p9_req_t {
  80         int status;
  81         int t_err;
  82         struct kref refcount;
  83         wait_queue_head_t wq;
  84         struct p9_fcall tc;
  85         struct p9_fcall rc;
  86         void *aux;
  87         struct list_head req_list;
  88 };
  89 
  90 
  91 
  92 
  93 
  94 
  95 
  96 
  97 
  98 
  99 
 100 
 101 
 102 
 103 
 104 
 105 struct p9_client {
 106         spinlock_t lock;
 107         unsigned int msize;
 108         unsigned char proto_version;
 109         struct p9_trans_module *trans_mod;
 110         enum p9_trans_status status;
 111         void *trans;
 112         struct kmem_cache *fcall_cache;
 113 
 114         union {
 115                 struct {
 116                         int rfd;
 117                         int wfd;
 118                 } fd;
 119                 struct {
 120                         u16 port;
 121                         bool privport;
 122 
 123                 } tcp;
 124         } trans_opts;
 125 
 126         struct idr fids;
 127         struct idr reqs;
 128 
 129         char name[__NEW_UTS_LEN + 1];
 130 };
 131 
 132 
 133 
 134 
 135 
 136 
 137 
 138 
 139 
 140 
 141 
 142 
 143 
 144 
 145 
 146 struct p9_fid {
 147         struct p9_client *clnt;
 148         u32 fid;
 149         int mode;
 150         struct p9_qid qid;
 151         u32 iounit;
 152         kuid_t uid;
 153 
 154         void *rdir;
 155 
 156         struct hlist_node dlist;        
 157 };
 158 
 159 
 160 
 161 
 162 
 163 
 164 
 165 
 166 
 167 struct p9_dirent {
 168         struct p9_qid qid;
 169         u64 d_off;
 170         unsigned char d_type;
 171         char d_name[256];
 172 };
 173 
 174 struct iov_iter;
 175 
 176 int p9_show_client_options(struct seq_file *m, struct p9_client *clnt);
 177 int p9_client_statfs(struct p9_fid *fid, struct p9_rstatfs *sb);
 178 int p9_client_rename(struct p9_fid *fid, struct p9_fid *newdirfid,
 179                      const char *name);
 180 int p9_client_renameat(struct p9_fid *olddirfid, const char *old_name,
 181                        struct p9_fid *newdirfid, const char *new_name);
 182 struct p9_client *p9_client_create(const char *dev_name, char *options);
 183 void p9_client_destroy(struct p9_client *clnt);
 184 void p9_client_disconnect(struct p9_client *clnt);
 185 void p9_client_begin_disconnect(struct p9_client *clnt);
 186 struct p9_fid *p9_client_attach(struct p9_client *clnt, struct p9_fid *afid,
 187                                 const char *uname, kuid_t n_uname, const char *aname);
 188 struct p9_fid *p9_client_walk(struct p9_fid *oldfid, uint16_t nwname,
 189                 const unsigned char * const *wnames, int clone);
 190 int p9_client_open(struct p9_fid *fid, int mode);
 191 int p9_client_fcreate(struct p9_fid *fid, const char *name, u32 perm, int mode,
 192                                                         char *extension);
 193 int p9_client_link(struct p9_fid *fid, struct p9_fid *oldfid, const char *newname);
 194 int p9_client_symlink(struct p9_fid *fid, const char *name, const char *symname,
 195                 kgid_t gid, struct p9_qid *qid);
 196 int p9_client_create_dotl(struct p9_fid *ofid, const char *name, u32 flags, u32 mode,
 197                 kgid_t gid, struct p9_qid *qid);
 198 int p9_client_clunk(struct p9_fid *fid);
 199 int p9_client_fsync(struct p9_fid *fid, int datasync);
 200 int p9_client_remove(struct p9_fid *fid);
 201 int p9_client_unlinkat(struct p9_fid *dfid, const char *name, int flags);
 202 int p9_client_read(struct p9_fid *fid, u64 offset, struct iov_iter *to, int *err);
 203 int p9_client_write(struct p9_fid *fid, u64 offset, struct iov_iter *from, int *err);
 204 int p9_client_readdir(struct p9_fid *fid, char *data, u32 count, u64 offset);
 205 int p9dirent_read(struct p9_client *clnt, char *buf, int len,
 206                   struct p9_dirent *dirent);
 207 struct p9_wstat *p9_client_stat(struct p9_fid *fid);
 208 int p9_client_wstat(struct p9_fid *fid, struct p9_wstat *wst);
 209 int p9_client_setattr(struct p9_fid *fid, struct p9_iattr_dotl *attr);
 210 
 211 struct p9_stat_dotl *p9_client_getattr_dotl(struct p9_fid *fid,
 212                                                         u64 request_mask);
 213 
 214 int p9_client_mknod_dotl(struct p9_fid *oldfid, const char *name, int mode,
 215                         dev_t rdev, kgid_t gid, struct p9_qid *);
 216 int p9_client_mkdir_dotl(struct p9_fid *fid, const char *name, int mode,
 217                                 kgid_t gid, struct p9_qid *);
 218 int p9_client_lock_dotl(struct p9_fid *fid, struct p9_flock *flock, u8 *status);
 219 int p9_client_getlock_dotl(struct p9_fid *fid, struct p9_getlock *fl);
 220 void p9_fcall_fini(struct p9_fcall *fc);
 221 struct p9_req_t *p9_tag_lookup(struct p9_client *, u16);
 222 
 223 static inline void p9_req_get(struct p9_req_t *r)
 224 {
 225         kref_get(&r->refcount);
 226 }
 227 
 228 static inline int p9_req_try_get(struct p9_req_t *r)
 229 {
 230         return kref_get_unless_zero(&r->refcount);
 231 }
 232 
 233 int p9_req_put(struct p9_req_t *r);
 234 
 235 void p9_client_cb(struct p9_client *c, struct p9_req_t *req, int status);
 236 
 237 int p9_parse_header(struct p9_fcall *, int32_t *, int8_t *, int16_t *, int);
 238 int p9stat_read(struct p9_client *, char *, int, struct p9_wstat *);
 239 void p9stat_free(struct p9_wstat *);
 240 
 241 int p9_is_proto_dotu(struct p9_client *clnt);
 242 int p9_is_proto_dotl(struct p9_client *clnt);
 243 struct p9_fid *p9_client_xattrwalk(struct p9_fid *, const char *, u64 *);
 244 int p9_client_xattrcreate(struct p9_fid *, const char *, u64, int);
 245 int p9_client_readlink(struct p9_fid *fid, char **target);
 246 
 247 int p9_client_init(void);
 248 void p9_client_exit(void);
 249 
 250 #endif