You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs: (22 commits) 9p: fix sparse warnings in new xattr code fs/9p: remove sparse warning in vfs_inode fs/9p: destroy fid on failed remove fs/9p: Prevent parallel rename when doing fid_lookup fs/9p: Add support user. xattr net/9p: Implement TXATTRCREATE 9p call net/9p: Implement attrwalk 9p call 9p: Implement LOPEN fs/9p: This patch implements TLCREATE for 9p2000.L protocol. 9p: Implement TMKDIR 9p: Implement TMKNOD 9p: Define and implement TSYMLINK for 9P2000.L 9p: Define and implement TLINK for 9P2000.L 9p: Define and implement TLINK for 9P2000.L 9p: Implement client side of setattr for 9P2000.L protocol. 9p: getattr client implementation for 9P2000.L protocol. fs/9p: Pass the correct user credentials during attach net/9p: Handle the server returned error properly 9p: readdir implementation for 9p2000.L 9p: Make use of iounit for read/write ...
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
* compatible drivers/servers. */
|
||||
#include <linux/virtio_ids.h>
|
||||
#include <linux/virtio_config.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
/* The feature bitmap for virtio 9P */
|
||||
|
||||
|
||||
@@ -88,8 +88,16 @@ do { \
|
||||
* enum p9_msg_t - 9P message types
|
||||
* @P9_TSTATFS: file system status request
|
||||
* @P9_RSTATFS: file system status response
|
||||
* @P9_TSYMLINK: make symlink request
|
||||
* @P9_RSYMLINK: make symlink response
|
||||
* @P9_TMKNOD: create a special file object request
|
||||
* @P9_RMKNOD: create a special file object response
|
||||
* @P9_TLCREATE: prepare a handle for I/O on an new file for 9P2000.L
|
||||
* @P9_RLCREATE: response with file access information for 9P2000.L
|
||||
* @P9_TRENAME: rename request
|
||||
* @P9_RRENAME: rename response
|
||||
* @P9_TMKDIR: create a directory request
|
||||
* @P9_RMKDIR: create a directory response
|
||||
* @P9_TVERSION: version handshake request
|
||||
* @P9_RVERSION: version handshake response
|
||||
* @P9_TAUTH: request to establish authentication channel
|
||||
@@ -131,8 +139,30 @@ do { \
|
||||
enum p9_msg_t {
|
||||
P9_TSTATFS = 8,
|
||||
P9_RSTATFS,
|
||||
P9_TLOPEN = 12,
|
||||
P9_RLOPEN,
|
||||
P9_TLCREATE = 14,
|
||||
P9_RLCREATE,
|
||||
P9_TSYMLINK = 16,
|
||||
P9_RSYMLINK,
|
||||
P9_TMKNOD = 18,
|
||||
P9_RMKNOD,
|
||||
P9_TRENAME = 20,
|
||||
P9_RRENAME,
|
||||
P9_TGETATTR = 24,
|
||||
P9_RGETATTR,
|
||||
P9_TSETATTR = 26,
|
||||
P9_RSETATTR,
|
||||
P9_TXATTRWALK = 30,
|
||||
P9_RXATTRWALK,
|
||||
P9_TXATTRCREATE = 32,
|
||||
P9_RXATTRCREATE,
|
||||
P9_TREADDIR = 40,
|
||||
P9_RREADDIR,
|
||||
P9_TLINK = 70,
|
||||
P9_RLINK,
|
||||
P9_TMKDIR = 72,
|
||||
P9_RMKDIR,
|
||||
P9_TVERSION = 100,
|
||||
P9_RVERSION,
|
||||
P9_TAUTH = 102,
|
||||
@@ -275,6 +305,9 @@ enum p9_qid_t {
|
||||
/* ample room for Twrite/Rread header */
|
||||
#define P9_IOHDRSZ 24
|
||||
|
||||
/* Room for readdir header */
|
||||
#define P9_READDIRHDRSZ 24
|
||||
|
||||
/**
|
||||
* struct p9_str - length prefixed string type
|
||||
* @len: length of the string
|
||||
@@ -357,6 +390,74 @@ struct p9_wstat {
|
||||
u32 n_muid; /* 9p2000.u extensions */
|
||||
};
|
||||
|
||||
struct p9_stat_dotl {
|
||||
u64 st_result_mask;
|
||||
struct p9_qid qid;
|
||||
u32 st_mode;
|
||||
u32 st_uid;
|
||||
u32 st_gid;
|
||||
u64 st_nlink;
|
||||
u64 st_rdev;
|
||||
u64 st_size;
|
||||
u64 st_blksize;
|
||||
u64 st_blocks;
|
||||
u64 st_atime_sec;
|
||||
u64 st_atime_nsec;
|
||||
u64 st_mtime_sec;
|
||||
u64 st_mtime_nsec;
|
||||
u64 st_ctime_sec;
|
||||
u64 st_ctime_nsec;
|
||||
u64 st_btime_sec;
|
||||
u64 st_btime_nsec;
|
||||
u64 st_gen;
|
||||
u64 st_data_version;
|
||||
};
|
||||
|
||||
#define P9_STATS_MODE 0x00000001ULL
|
||||
#define P9_STATS_NLINK 0x00000002ULL
|
||||
#define P9_STATS_UID 0x00000004ULL
|
||||
#define P9_STATS_GID 0x00000008ULL
|
||||
#define P9_STATS_RDEV 0x00000010ULL
|
||||
#define P9_STATS_ATIME 0x00000020ULL
|
||||
#define P9_STATS_MTIME 0x00000040ULL
|
||||
#define P9_STATS_CTIME 0x00000080ULL
|
||||
#define P9_STATS_INO 0x00000100ULL
|
||||
#define P9_STATS_SIZE 0x00000200ULL
|
||||
#define P9_STATS_BLOCKS 0x00000400ULL
|
||||
|
||||
#define P9_STATS_BTIME 0x00000800ULL
|
||||
#define P9_STATS_GEN 0x00001000ULL
|
||||
#define P9_STATS_DATA_VERSION 0x00002000ULL
|
||||
|
||||
#define P9_STATS_BASIC 0x000007ffULL /* Mask for fields up to BLOCKS */
|
||||
#define P9_STATS_ALL 0x00003fffULL /* Mask for All fields above */
|
||||
|
||||
/**
|
||||
* struct p9_iattr_dotl - P9 inode attribute for setattr
|
||||
* @valid: bitfield specifying which fields are valid
|
||||
* same as in struct iattr
|
||||
* @mode: File permission bits
|
||||
* @uid: user id of owner
|
||||
* @gid: group id
|
||||
* @size: File size
|
||||
* @atime_sec: Last access time, seconds
|
||||
* @atime_nsec: Last access time, nanoseconds
|
||||
* @mtime_sec: Last modification time, seconds
|
||||
* @mtime_nsec: Last modification time, nanoseconds
|
||||
*/
|
||||
|
||||
struct p9_iattr_dotl {
|
||||
u32 valid;
|
||||
u32 mode;
|
||||
u32 uid;
|
||||
u32 gid;
|
||||
u64 size;
|
||||
u64 atime_sec;
|
||||
u64 atime_nsec;
|
||||
u64 mtime_sec;
|
||||
u64 mtime_nsec;
|
||||
};
|
||||
|
||||
/* Structures for Protocol Operations */
|
||||
struct p9_tstatfs {
|
||||
u32 fid;
|
||||
@@ -485,6 +586,18 @@ struct p9_rwrite {
|
||||
u32 count;
|
||||
};
|
||||
|
||||
struct p9_treaddir {
|
||||
u32 fid;
|
||||
u64 offset;
|
||||
u32 count;
|
||||
};
|
||||
|
||||
struct p9_rreaddir {
|
||||
u32 count;
|
||||
u8 *data;
|
||||
};
|
||||
|
||||
|
||||
struct p9_tclunk {
|
||||
u32 fid;
|
||||
};
|
||||
|
||||
@@ -195,6 +195,21 @@ struct p9_fid {
|
||||
struct list_head dlist; /* list of all fids attached to a dentry */
|
||||
};
|
||||
|
||||
/**
|
||||
* struct p9_dirent - directory entry structure
|
||||
* @qid: The p9 server qid for this dirent
|
||||
* @d_off: offset to the next dirent
|
||||
* @d_type: type of file
|
||||
* @d_name: file name
|
||||
*/
|
||||
|
||||
struct p9_dirent {
|
||||
struct p9_qid qid;
|
||||
u64 d_off;
|
||||
unsigned char d_type;
|
||||
char d_name[256];
|
||||
};
|
||||
|
||||
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 *);
|
||||
@@ -211,15 +226,31 @@ struct p9_fid *p9_client_walk(struct p9_fid *oldfid, int nwname, char **wnames,
|
||||
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,
|
||||
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);
|
||||
int p9_client_clunk(struct p9_fid *fid);
|
||||
int p9_client_remove(struct p9_fid *fid);
|
||||
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);
|
||||
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);
|
||||
|
||||
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 *);
|
||||
int p9_client_mkdir_dotl(struct p9_fid *fid, char *name, int mode,
|
||||
gid_t gid, struct p9_qid *);
|
||||
struct p9_req_t *p9_tag_lookup(struct p9_client *, u16);
|
||||
void p9_client_cb(struct p9_client *c, struct p9_req_t *req);
|
||||
|
||||
@@ -229,5 +260,7 @@ void p9stat_free(struct p9_wstat *);
|
||||
|
||||
int p9_is_proto_dotu(struct p9_client *clnt);
|
||||
int p9_is_proto_dotl(struct p9_client *clnt);
|
||||
struct p9_fid *p9_client_xattrwalk(struct p9_fid *, const char *, u64 *);
|
||||
int p9_client_xattrcreate(struct p9_fid *, const char *, u64, int);
|
||||
|
||||
#endif /* NET_9P_CLIENT_H */
|
||||
|
||||
Reference in New Issue
Block a user