Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/fs/coda/coda_psdev.h
26282 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
#ifndef __CODA_PSDEV_H
3
#define __CODA_PSDEV_H
4
5
#include <linux/backing-dev.h>
6
#include <linux/magic.h>
7
#include <linux/mutex.h>
8
9
#define CODA_PSDEV_MAJOR 67
10
#define MAX_CODADEVS 5 /* how many do we allow */
11
12
struct kstatfs;
13
14
/* messages between coda filesystem in kernel and Venus */
15
struct upc_req {
16
struct list_head uc_chain;
17
caddr_t uc_data;
18
u_short uc_flags;
19
u_short uc_inSize; /* Size is at most 5000 bytes */
20
u_short uc_outSize;
21
u_short uc_opcode; /* copied from data to save lookup */
22
int uc_unique;
23
wait_queue_head_t uc_sleep; /* process' wait queue */
24
};
25
26
#define CODA_REQ_ASYNC 0x1
27
#define CODA_REQ_READ 0x2
28
#define CODA_REQ_WRITE 0x4
29
#define CODA_REQ_ABORT 0x8
30
31
/* communication pending/processing queues */
32
struct venus_comm {
33
u_long vc_seq;
34
wait_queue_head_t vc_waitq; /* Venus wait queue */
35
struct list_head vc_pending;
36
struct list_head vc_processing;
37
int vc_inuse;
38
struct super_block *vc_sb;
39
struct mutex vc_mutex;
40
};
41
42
static inline struct venus_comm *coda_vcp(struct super_block *sb)
43
{
44
return (struct venus_comm *)((sb)->s_fs_info);
45
}
46
47
/* upcalls */
48
int venus_rootfid(struct super_block *sb, struct CodaFid *fidp);
49
int venus_getattr(struct super_block *sb, struct CodaFid *fid,
50
struct coda_vattr *attr);
51
int venus_setattr(struct super_block *, struct CodaFid *, struct coda_vattr *);
52
int venus_lookup(struct super_block *sb, struct CodaFid *fid,
53
const char *name, int length, int *type,
54
struct CodaFid *resfid);
55
int venus_close(struct super_block *sb, struct CodaFid *fid, int flags,
56
kuid_t uid);
57
int venus_open(struct super_block *sb, struct CodaFid *fid, int flags,
58
struct file **f);
59
int venus_mkdir(struct super_block *sb, struct CodaFid *dirfid,
60
const char *name, int length,
61
struct CodaFid *newfid, struct coda_vattr *attrs);
62
int venus_create(struct super_block *sb, struct CodaFid *dirfid,
63
const char *name, int length, int excl, int mode,
64
struct CodaFid *newfid, struct coda_vattr *attrs);
65
int venus_rmdir(struct super_block *sb, struct CodaFid *dirfid,
66
const char *name, int length);
67
int venus_remove(struct super_block *sb, struct CodaFid *dirfid,
68
const char *name, int length);
69
int venus_readlink(struct super_block *sb, struct CodaFid *fid,
70
char *buffer, int *length);
71
int venus_rename(struct super_block *sb, struct CodaFid *new_fid,
72
struct CodaFid *old_fid, size_t old_length,
73
size_t new_length, const char *old_name,
74
const char *new_name);
75
int venus_link(struct super_block *sb, struct CodaFid *fid,
76
struct CodaFid *dirfid, const char *name, int len );
77
int venus_symlink(struct super_block *sb, struct CodaFid *fid,
78
const char *name, int len, const char *symname, int symlen);
79
int venus_access(struct super_block *sb, struct CodaFid *fid, int mask);
80
int venus_pioctl(struct super_block *sb, struct CodaFid *fid,
81
unsigned int cmd, struct PioctlData *data);
82
int coda_downcall(struct venus_comm *vcp, int opcode, union outputArgs *out,
83
size_t nbytes);
84
int venus_fsync(struct super_block *sb, struct CodaFid *fid);
85
int venus_statfs(struct dentry *dentry, struct kstatfs *sfs);
86
int venus_access_intent(struct super_block *sb, struct CodaFid *fid,
87
bool *access_intent_supported,
88
size_t count, loff_t ppos, int type);
89
90
/*
91
* Statistics
92
*/
93
94
extern struct venus_comm coda_comms[];
95
#endif
96
97