Commit 6e195b0f authored by Dominique Martinet's avatar Dominique Martinet

9p: fix a bunch of checkpatch warnings

Sohaib Mohamed started a serie of tiny and incomplete checkpatch fixes but
seemingly stopped halfway -- take over and do most of it.
This is still missing net/9p/trans* and net/9p/protocol.c for a later
time...

Link: http://lkml.kernel.org/r/20211102134608.1588018-3-dominique.martinet@atmark-techno.comSigned-off-by: default avatarDominique Martinet <asmadeus@codewreck.org>
parent b1843d23
...@@ -115,6 +115,7 @@ static int v9fs_set_acl(struct p9_fid *fid, int type, struct posix_acl *acl) ...@@ -115,6 +115,7 @@ static int v9fs_set_acl(struct p9_fid *fid, int type, struct posix_acl *acl)
char *name; char *name;
size_t size; size_t size;
void *buffer; void *buffer;
if (!acl) if (!acl)
return 0; return 0;
......
...@@ -7,14 +7,15 @@ ...@@ -7,14 +7,15 @@
#define FS_9P_ACL_H #define FS_9P_ACL_H
#ifdef CONFIG_9P_FS_POSIX_ACL #ifdef CONFIG_9P_FS_POSIX_ACL
extern int v9fs_get_acl(struct inode *, struct p9_fid *); int v9fs_get_acl(struct inode *inode, struct p9_fid *fid);
extern struct posix_acl *v9fs_iop_get_acl(struct inode *inode, int type, bool rcu); struct posix_acl *v9fs_iop_get_acl(struct inode *inode, int type,
extern int v9fs_acl_chmod(struct inode *, struct p9_fid *); bool rcu);
extern int v9fs_set_create_acl(struct inode *, struct p9_fid *, int v9fs_acl_chmod(struct inode *inode, struct p9_fid *fid);
struct posix_acl *, struct posix_acl *); int v9fs_set_create_acl(struct inode *inode, struct p9_fid *fid,
extern int v9fs_acl_mode(struct inode *dir, umode_t *modep, struct posix_acl *dacl, struct posix_acl *acl);
int v9fs_acl_mode(struct inode *dir, umode_t *modep,
struct posix_acl **dpacl, struct posix_acl **pacl); struct posix_acl **dpacl, struct posix_acl **pacl);
extern void v9fs_put_acl(struct posix_acl *dacl, struct posix_acl *acl); void v9fs_put_acl(struct posix_acl *dacl, struct posix_acl *acl);
#else #else
#define v9fs_iop_get_acl NULL #define v9fs_iop_get_acl NULL
static inline int v9fs_get_acl(struct inode *inode, struct p9_fid *fid) static inline int v9fs_get_acl(struct inode *inode, struct p9_fid *fid)
......
...@@ -188,8 +188,10 @@ static int v9fs_parse_options(struct v9fs_session_info *v9ses, char *opts) ...@@ -188,8 +188,10 @@ static int v9fs_parse_options(struct v9fs_session_info *v9ses, char *opts)
while ((p = strsep(&options, ",")) != NULL) { while ((p = strsep(&options, ",")) != NULL) {
int token, r; int token, r;
if (!*p) if (!*p)
continue; continue;
token = match_token(p, tokens, args); token = match_token(p, tokens, args);
switch (token) { switch (token) {
case Opt_debug: case Opt_debug:
...@@ -659,6 +661,7 @@ static void v9fs_destroy_inode_cache(void) ...@@ -659,6 +661,7 @@ static void v9fs_destroy_inode_cache(void)
static int v9fs_cache_register(void) static int v9fs_cache_register(void)
{ {
int ret; int ret;
ret = v9fs_init_inode_cache(); ret = v9fs_init_inode_cache();
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -686,6 +689,7 @@ static void v9fs_cache_unregister(void) ...@@ -686,6 +689,7 @@ static void v9fs_cache_unregister(void)
static int __init init_v9fs(void) static int __init init_v9fs(void)
{ {
int err; int err;
pr_info("Installing v9fs 9p2000 file system support\n"); pr_info("Installing v9fs 9p2000 file system support\n");
/* TODO: Setup list of registered trasnport modules */ /* TODO: Setup list of registered trasnport modules */
......
...@@ -44,9 +44,10 @@ extern struct kmem_cache *v9fs_inode_cache; ...@@ -44,9 +44,10 @@ extern struct kmem_cache *v9fs_inode_cache;
struct inode *v9fs_alloc_inode(struct super_block *sb); struct inode *v9fs_alloc_inode(struct super_block *sb);
void v9fs_free_inode(struct inode *inode); void v9fs_free_inode(struct inode *inode);
struct inode *v9fs_get_inode(struct super_block *sb, umode_t mode, dev_t); struct inode *v9fs_get_inode(struct super_block *sb, umode_t mode,
dev_t rdev);
int v9fs_init_inode(struct v9fs_session_info *v9ses, int v9fs_init_inode(struct v9fs_session_info *v9ses,
struct inode *inode, umode_t mode, dev_t); struct inode *inode, umode_t mode, dev_t rdev);
void v9fs_evict_inode(struct inode *inode); void v9fs_evict_inode(struct inode *inode);
ino_t v9fs_qid2ino(struct p9_qid *qid); ino_t v9fs_qid2ino(struct p9_qid *qid);
void v9fs_stat2inode(struct p9_wstat *stat, struct inode *inode, void v9fs_stat2inode(struct p9_wstat *stat, struct inode *inode,
...@@ -59,8 +60,8 @@ void v9fs_inode2stat(struct inode *inode, struct p9_wstat *stat); ...@@ -59,8 +60,8 @@ void v9fs_inode2stat(struct inode *inode, struct p9_wstat *stat);
int v9fs_uflags2omode(int uflags, int extended); int v9fs_uflags2omode(int uflags, int extended);
void v9fs_blank_wstat(struct p9_wstat *wstat); void v9fs_blank_wstat(struct p9_wstat *wstat);
int v9fs_vfs_setattr_dotl(struct user_namespace *, struct dentry *, int v9fs_vfs_setattr_dotl(struct user_namespace *mnt_userns,
struct iattr *); struct dentry *dentry, struct iattr *iattr);
int v9fs_file_fsync_dotl(struct file *filp, loff_t start, loff_t end, int v9fs_file_fsync_dotl(struct file *filp, loff_t start, loff_t end,
int datasync); int datasync);
int v9fs_refresh_inode(struct p9_fid *fid, struct inode *inode); int v9fs_refresh_inode(struct p9_fid *fid, struct inode *inode);
...@@ -68,9 +69,9 @@ int v9fs_refresh_inode_dotl(struct p9_fid *fid, struct inode *inode); ...@@ -68,9 +69,9 @@ int v9fs_refresh_inode_dotl(struct p9_fid *fid, struct inode *inode);
static inline void v9fs_invalidate_inode_attr(struct inode *inode) static inline void v9fs_invalidate_inode_attr(struct inode *inode)
{ {
struct v9fs_inode *v9inode; struct v9fs_inode *v9inode;
v9inode = V9FS_I(inode); v9inode = V9FS_I(inode);
v9inode->cache_validity |= V9FS_INO_INVALID_ATTR; v9inode->cache_validity |= V9FS_INO_INVALID_ATTR;
return;
} }
int v9fs_open_to_dotl_flags(int flags); int v9fs_open_to_dotl_flags(int flags);
......
...@@ -247,11 +247,13 @@ v9fs_direct_IO(struct kiocb *iocb, struct iov_iter *iter) ...@@ -247,11 +247,13 @@ v9fs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
loff_t pos = iocb->ki_pos; loff_t pos = iocb->ki_pos;
ssize_t n; ssize_t n;
int err = 0; int err = 0;
if (iov_iter_rw(iter) == WRITE) { if (iov_iter_rw(iter) == WRITE) {
n = p9_client_write(file->private_data, pos, iter, &err); n = p9_client_write(file->private_data, pos, iter, &err);
if (n) { if (n) {
struct inode *inode = file_inode(file); struct inode *inode = file_inode(file);
loff_t i_size = i_size_read(inode); loff_t i_size = i_size_read(inode);
if (pos + n > i_size) if (pos + n > i_size)
inode_add_bytes(inode, pos + n - i_size); inode_add_bytes(inode, pos + n - i_size);
} }
...@@ -262,7 +264,7 @@ v9fs_direct_IO(struct kiocb *iocb, struct iov_iter *iter) ...@@ -262,7 +264,7 @@ v9fs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
} }
static int v9fs_write_begin(struct file *filp, struct address_space *mapping, static int v9fs_write_begin(struct file *filp, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags, loff_t pos, unsigned int len, unsigned int flags,
struct page **pagep, void **fsdata) struct page **pagep, void **fsdata)
{ {
int retval; int retval;
...@@ -287,7 +289,7 @@ static int v9fs_write_begin(struct file *filp, struct address_space *mapping, ...@@ -287,7 +289,7 @@ static int v9fs_write_begin(struct file *filp, struct address_space *mapping,
} }
static int v9fs_write_end(struct file *filp, struct address_space *mapping, static int v9fs_write_end(struct file *filp, struct address_space *mapping,
loff_t pos, unsigned len, unsigned copied, loff_t pos, unsigned int len, unsigned int copied,
struct page *page, void *fsdata) struct page *page, void *fsdata)
{ {
loff_t last_pos = pos + copied; loff_t last_pos = pos + copied;
......
...@@ -50,6 +50,7 @@ static int v9fs_cached_dentry_delete(const struct dentry *dentry) ...@@ -50,6 +50,7 @@ static int v9fs_cached_dentry_delete(const struct dentry *dentry)
static void v9fs_dentry_release(struct dentry *dentry) static void v9fs_dentry_release(struct dentry *dentry)
{ {
struct hlist_node *p, *n; struct hlist_node *p, *n;
p9_debug(P9_DEBUG_VFS, " dentry: %pd (%p)\n", p9_debug(P9_DEBUG_VFS, " dentry: %pd (%p)\n",
dentry, dentry); dentry, dentry);
hlist_for_each_safe(p, n, (struct hlist_head *)&dentry->d_fsdata) hlist_for_each_safe(p, n, (struct hlist_head *)&dentry->d_fsdata)
...@@ -74,6 +75,7 @@ static int v9fs_lookup_revalidate(struct dentry *dentry, unsigned int flags) ...@@ -74,6 +75,7 @@ static int v9fs_lookup_revalidate(struct dentry *dentry, unsigned int flags)
if (v9inode->cache_validity & V9FS_INO_INVALID_ATTR) { if (v9inode->cache_validity & V9FS_INO_INVALID_ATTR) {
int retval; int retval;
struct v9fs_session_info *v9ses; struct v9fs_session_info *v9ses;
fid = v9fs_fid_lookup(dentry); fid = v9fs_fid_lookup(dentry);
if (IS_ERR(fid)) if (IS_ERR(fid))
return PTR_ERR(fid); return PTR_ERR(fid);
......
...@@ -406,6 +406,7 @@ v9fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from) ...@@ -406,6 +406,7 @@ v9fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
struct inode *inode = file_inode(file); struct inode *inode = file_inode(file);
loff_t i_size; loff_t i_size;
unsigned long pg_start, pg_end; unsigned long pg_start, pg_end;
pg_start = origin >> PAGE_SHIFT; pg_start = origin >> PAGE_SHIFT;
pg_end = (origin + retval - 1) >> PAGE_SHIFT; pg_end = (origin + retval - 1) >> PAGE_SHIFT;
if (inode->i_mapping && inode->i_mapping->nrpages) if (inode->i_mapping && inode->i_mapping->nrpages)
......
...@@ -47,6 +47,7 @@ static const struct inode_operations v9fs_symlink_inode_operations; ...@@ -47,6 +47,7 @@ static const struct inode_operations v9fs_symlink_inode_operations;
static u32 unixmode2p9mode(struct v9fs_session_info *v9ses, umode_t mode) static u32 unixmode2p9mode(struct v9fs_session_info *v9ses, umode_t mode)
{ {
int res; int res;
res = mode & 0777; res = mode & 0777;
if (S_ISDIR(mode)) if (S_ISDIR(mode))
res |= P9_DMDIR; res |= P9_DMDIR;
...@@ -226,6 +227,7 @@ v9fs_blank_wstat(struct p9_wstat *wstat) ...@@ -226,6 +227,7 @@ v9fs_blank_wstat(struct p9_wstat *wstat)
struct inode *v9fs_alloc_inode(struct super_block *sb) struct inode *v9fs_alloc_inode(struct super_block *sb)
{ {
struct v9fs_inode *v9inode; struct v9fs_inode *v9inode;
v9inode = kmem_cache_alloc(v9fs_inode_cache, GFP_KERNEL); v9inode = kmem_cache_alloc(v9fs_inode_cache, GFP_KERNEL);
if (!v9inode) if (!v9inode)
return NULL; return NULL;
...@@ -254,7 +256,7 @@ int v9fs_init_inode(struct v9fs_session_info *v9ses, ...@@ -254,7 +256,7 @@ int v9fs_init_inode(struct v9fs_session_info *v9ses,
{ {
int err = 0; int err = 0;
inode_init_owner(&init_user_ns,inode, NULL, mode); inode_init_owner(&init_user_ns, inode, NULL, mode);
inode->i_blocks = 0; inode->i_blocks = 0;
inode->i_rdev = rdev; inode->i_rdev = rdev;
inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode); inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
...@@ -443,7 +445,7 @@ static struct inode *v9fs_qid_iget(struct super_block *sb, ...@@ -443,7 +445,7 @@ static struct inode *v9fs_qid_iget(struct super_block *sb,
unsigned long i_ino; unsigned long i_ino;
struct inode *inode; struct inode *inode;
struct v9fs_session_info *v9ses = sb->s_fs_info; struct v9fs_session_info *v9ses = sb->s_fs_info;
int (*test)(struct inode *, void *); int (*test)(struct inode *inode, void *data);
if (new) if (new)
test = v9fs_test_new_inode; test = v9fs_test_new_inode;
...@@ -502,8 +504,10 @@ v9fs_inode_from_fid(struct v9fs_session_info *v9ses, struct p9_fid *fid, ...@@ -502,8 +504,10 @@ v9fs_inode_from_fid(struct v9fs_session_info *v9ses, struct p9_fid *fid,
static int v9fs_at_to_dotl_flags(int flags) static int v9fs_at_to_dotl_flags(int flags)
{ {
int rflags = 0; int rflags = 0;
if (flags & AT_REMOVEDIR) if (flags & AT_REMOVEDIR)
rflags |= P9_DOTL_AT_REMOVEDIR; rflags |= P9_DOTL_AT_REMOVEDIR;
return rflags; return rflags;
} }
...@@ -800,7 +804,7 @@ struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry, ...@@ -800,7 +804,7 @@ struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry,
static int static int
v9fs_vfs_atomic_open(struct inode *dir, struct dentry *dentry, v9fs_vfs_atomic_open(struct inode *dir, struct dentry *dentry,
struct file *file, unsigned flags, umode_t mode) struct file *file, unsigned int flags, umode_t mode)
{ {
int err; int err;
u32 perm; u32 perm;
...@@ -1087,7 +1091,7 @@ static int v9fs_vfs_setattr(struct user_namespace *mnt_userns, ...@@ -1087,7 +1091,7 @@ static int v9fs_vfs_setattr(struct user_namespace *mnt_userns,
fid = v9fs_fid_lookup(dentry); fid = v9fs_fid_lookup(dentry);
use_dentry = 1; use_dentry = 1;
} }
if(IS_ERR(fid)) if (IS_ERR(fid))
return PTR_ERR(fid); return PTR_ERR(fid);
v9fs_blank_wstat(&wstat); v9fs_blank_wstat(&wstat);
...@@ -1367,7 +1371,7 @@ v9fs_vfs_mknod(struct user_namespace *mnt_userns, struct inode *dir, ...@@ -1367,7 +1371,7 @@ v9fs_vfs_mknod(struct user_namespace *mnt_userns, struct inode *dir,
char name[2 + U32_MAX_DIGITS + 1 + U32_MAX_DIGITS + 1]; char name[2 + U32_MAX_DIGITS + 1 + U32_MAX_DIGITS + 1];
u32 perm; u32 perm;
p9_debug(P9_DEBUG_VFS, " %lu,%pd mode: %hx MAJOR: %u MINOR: %u\n", p9_debug(P9_DEBUG_VFS, " %lu,%pd mode: %x MAJOR: %u MINOR: %u\n",
dir->i_ino, dentry, mode, dir->i_ino, dentry, mode,
MAJOR(rdev), MINOR(rdev)); MAJOR(rdev), MINOR(rdev));
......
...@@ -105,7 +105,7 @@ static struct inode *v9fs_qid_iget_dotl(struct super_block *sb, ...@@ -105,7 +105,7 @@ static struct inode *v9fs_qid_iget_dotl(struct super_block *sb,
unsigned long i_ino; unsigned long i_ino;
struct inode *inode; struct inode *inode;
struct v9fs_session_info *v9ses = sb->s_fs_info; struct v9fs_session_info *v9ses = sb->s_fs_info;
int (*test)(struct inode *, void *); int (*test)(struct inode *inode, void *data);
if (new) if (new)
test = v9fs_test_new_inode_dotl; test = v9fs_test_new_inode_dotl;
...@@ -228,7 +228,7 @@ v9fs_vfs_create_dotl(struct user_namespace *mnt_userns, struct inode *dir, ...@@ -228,7 +228,7 @@ v9fs_vfs_create_dotl(struct user_namespace *mnt_userns, struct inode *dir,
static int static int
v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry, v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry,
struct file *file, unsigned flags, umode_t omode) struct file *file, unsigned int flags, umode_t omode)
{ {
int err = 0; int err = 0;
kgid_t gid; kgid_t gid;
...@@ -259,7 +259,7 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry, ...@@ -259,7 +259,7 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry,
v9ses = v9fs_inode2v9ses(dir); v9ses = v9fs_inode2v9ses(dir);
name = dentry->d_name.name; name = dentry->d_name.name;
p9_debug(P9_DEBUG_VFS, "name:%s flags:0x%x mode:0x%hx\n", p9_debug(P9_DEBUG_VFS, "name:%s flags:0x%x mode:0x%x\n",
name, flags, omode); name, flags, omode);
dfid = v9fs_parent_fid(dentry); dfid = v9fs_parent_fid(dentry);
...@@ -805,6 +805,7 @@ v9fs_vfs_link_dotl(struct dentry *old_dentry, struct inode *dir, ...@@ -805,6 +805,7 @@ v9fs_vfs_link_dotl(struct dentry *old_dentry, struct inode *dir,
if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) { if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) {
/* Get the latest stat info from server. */ /* Get the latest stat info from server. */
struct p9_fid *fid; struct p9_fid *fid;
fid = v9fs_fid_lookup(old_dentry); fid = v9fs_fid_lookup(old_dentry);
if (IS_ERR(fid)) if (IS_ERR(fid))
return PTR_ERR(fid); return PTR_ERR(fid);
...@@ -841,7 +842,7 @@ v9fs_vfs_mknod_dotl(struct user_namespace *mnt_userns, struct inode *dir, ...@@ -841,7 +842,7 @@ v9fs_vfs_mknod_dotl(struct user_namespace *mnt_userns, struct inode *dir,
struct p9_qid qid; struct p9_qid qid;
struct posix_acl *dacl = NULL, *pacl = NULL; struct posix_acl *dacl = NULL, *pacl = NULL;
p9_debug(P9_DEBUG_VFS, " %lu,%pd mode: %hx MAJOR: %u MINOR: %u\n", p9_debug(P9_DEBUG_VFS, " %lu,%pd mode: %x MAJOR: %u MINOR: %u\n",
dir->i_ino, dentry, omode, dir->i_ino, dentry, omode,
MAJOR(rdev), MINOR(rdev)); MAJOR(rdev), MINOR(rdev));
......
...@@ -112,7 +112,7 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags, ...@@ -112,7 +112,7 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags,
struct inode *inode = NULL; struct inode *inode = NULL;
struct dentry *root = NULL; struct dentry *root = NULL;
struct v9fs_session_info *v9ses = NULL; struct v9fs_session_info *v9ses = NULL;
umode_t mode = S_IRWXUGO | S_ISVTX; umode_t mode = 0777 | S_ISVTX;
struct p9_fid *fid; struct p9_fid *fid;
int retval = 0; int retval = 0;
...@@ -156,6 +156,7 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags, ...@@ -156,6 +156,7 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags,
sb->s_root = root; sb->s_root = root;
if (v9fs_proto_dotl(v9ses)) { if (v9fs_proto_dotl(v9ses)) {
struct p9_stat_dotl *st = NULL; struct p9_stat_dotl *st = NULL;
st = p9_client_getattr_dotl(fid, P9_STATS_BASIC); st = p9_client_getattr_dotl(fid, P9_STATS_BASIC);
if (IS_ERR(st)) { if (IS_ERR(st)) {
retval = PTR_ERR(st); retval = PTR_ERR(st);
...@@ -166,6 +167,7 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags, ...@@ -166,6 +167,7 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags,
kfree(st); kfree(st);
} else { } else {
struct p9_wstat *st = NULL; struct p9_wstat *st = NULL;
st = p9_client_stat(fid); st = p9_client_stat(fid);
if (IS_ERR(st)) { if (IS_ERR(st)) {
retval = PTR_ERR(st); retval = PTR_ERR(st);
...@@ -274,12 +276,13 @@ static int v9fs_statfs(struct dentry *dentry, struct kstatfs *buf) ...@@ -274,12 +276,13 @@ static int v9fs_statfs(struct dentry *dentry, struct kstatfs *buf)
static int v9fs_drop_inode(struct inode *inode) static int v9fs_drop_inode(struct inode *inode)
{ {
struct v9fs_session_info *v9ses; struct v9fs_session_info *v9ses;
v9ses = v9fs_inode2v9ses(inode); v9ses = v9fs_inode2v9ses(inode);
if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE)
return generic_drop_inode(inode); return generic_drop_inode(inode);
/* /*
* in case of non cached mode always drop the * in case of non cached mode always drop the
* the inode because we want the inode attribute * inode because we want the inode attribute
* to always match that on the server. * to always match that on the server.
*/ */
return 1; return 1;
......
...@@ -14,13 +14,14 @@ extern const struct xattr_handler *v9fs_xattr_handlers[]; ...@@ -14,13 +14,14 @@ extern const struct xattr_handler *v9fs_xattr_handlers[];
extern const struct xattr_handler v9fs_xattr_acl_access_handler; extern const struct xattr_handler v9fs_xattr_acl_access_handler;
extern const struct xattr_handler v9fs_xattr_acl_default_handler; extern const struct xattr_handler v9fs_xattr_acl_default_handler;
extern ssize_t v9fs_fid_xattr_get(struct p9_fid *, const char *, ssize_t v9fs_fid_xattr_get(struct p9_fid *fid, const char *name,
void *, size_t); void *buffer, size_t buffer_size);
extern ssize_t v9fs_xattr_get(struct dentry *, const char *, ssize_t v9fs_xattr_get(struct dentry *dentry, const char *name,
void *, size_t); void *buffer, size_t buffer_size);
extern int v9fs_fid_xattr_set(struct p9_fid *, const char *, int v9fs_fid_xattr_set(struct p9_fid *fid, const char *name,
const void *, size_t, int); const void *value, size_t value_len, int flags);
extern int v9fs_xattr_set(struct dentry *, const char *, int v9fs_xattr_set(struct dentry *dentry, const char *name,
const void *, size_t, int); const void *value, size_t value_len, int flags);
extern ssize_t v9fs_listxattr(struct dentry *, char *, size_t); ssize_t v9fs_listxattr(struct dentry *dentry, char *buffer,
size_t buffer_size);
#endif /* FS_9P_XATTR_H */ #endif /* FS_9P_XATTR_H */
...@@ -315,8 +315,8 @@ enum p9_qid_t { ...@@ -315,8 +315,8 @@ enum p9_qid_t {
}; };
/* 9P Magic Numbers */ /* 9P Magic Numbers */
#define P9_NOTAG (u16)(~0) #define P9_NOTAG ((u16)(~0))
#define P9_NOFID (u32)(~0) #define P9_NOFID ((u32)(~0))
#define P9_MAXWELEM 16 #define P9_MAXWELEM 16
/* Minimal header size: size[4] type[1] tag[2] */ /* Minimal header size: size[4] type[1] tag[2] */
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
* @p9_proto_2000L: 9P2000.L extension * @p9_proto_2000L: 9P2000.L extension
*/ */
enum p9_proto_versions{ enum p9_proto_versions {
p9_proto_legacy, p9_proto_legacy,
p9_proto_2000u, p9_proto_2000u,
p9_proto_2000L, p9_proto_2000L,
...@@ -217,13 +217,13 @@ struct p9_stat_dotl *p9_client_getattr_dotl(struct p9_fid *fid, ...@@ -217,13 +217,13 @@ struct p9_stat_dotl *p9_client_getattr_dotl(struct p9_fid *fid,
u64 request_mask); u64 request_mask);
int p9_client_mknod_dotl(struct p9_fid *oldfid, const char *name, int mode, int p9_client_mknod_dotl(struct p9_fid *oldfid, const char *name, int mode,
dev_t rdev, kgid_t gid, struct p9_qid *); dev_t rdev, kgid_t gid, struct p9_qid *qid);
int p9_client_mkdir_dotl(struct p9_fid *fid, const char *name, int mode, int p9_client_mkdir_dotl(struct p9_fid *fid, const char *name, int mode,
kgid_t gid, struct p9_qid *); kgid_t gid, struct p9_qid *qid);
int p9_client_lock_dotl(struct p9_fid *fid, struct p9_flock *flock, u8 *status); 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); int p9_client_getlock_dotl(struct p9_fid *fid, struct p9_getlock *fl);
void p9_fcall_fini(struct p9_fcall *fc); void p9_fcall_fini(struct p9_fcall *fc);
struct p9_req_t *p9_tag_lookup(struct p9_client *, u16); struct p9_req_t *p9_tag_lookup(struct p9_client *c, u16 tag);
static inline void p9_req_get(struct p9_req_t *r) static inline void p9_req_get(struct p9_req_t *r)
{ {
...@@ -239,14 +239,18 @@ int p9_req_put(struct p9_req_t *r); ...@@ -239,14 +239,18 @@ int p9_req_put(struct p9_req_t *r);
void p9_client_cb(struct p9_client *c, struct p9_req_t *req, int status); 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 p9_parse_header(struct p9_fcall *pdu, int32_t *size, int8_t *type,
int p9stat_read(struct p9_client *, char *, int, struct p9_wstat *); int16_t *tag, int rewind);
void p9stat_free(struct p9_wstat *); int p9stat_read(struct p9_client *clnt, char *buf, int len,
struct p9_wstat *st);
void p9stat_free(struct p9_wstat *stbuf);
int p9_is_proto_dotu(struct p9_client *clnt); int p9_is_proto_dotu(struct p9_client *clnt);
int p9_is_proto_dotl(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 *); struct p9_fid *p9_client_xattrwalk(struct p9_fid *file_fid,
int p9_client_xattrcreate(struct p9_fid *, const char *, u64, int); const char *attr_name, u64 *attr_size);
int p9_client_xattrcreate(struct p9_fid *fid, const char *name,
u64 attr_size, int flags);
int p9_client_readlink(struct p9_fid *fid, char **target); int p9_client_readlink(struct p9_fid *fid, char **target);
int p9_client_init(void); int p9_client_init(void);
......
...@@ -40,14 +40,16 @@ struct p9_trans_module { ...@@ -40,14 +40,16 @@ struct p9_trans_module {
int maxsize; /* max message size of transport */ int maxsize; /* max message size of transport */
int def; /* this transport should be default */ int def; /* this transport should be default */
struct module *owner; struct module *owner;
int (*create)(struct p9_client *, const char *, char *); int (*create)(struct p9_client *client,
void (*close) (struct p9_client *); const char *devname, char *args);
int (*request) (struct p9_client *, struct p9_req_t *req); void (*close)(struct p9_client *client);
int (*cancel) (struct p9_client *, struct p9_req_t *req); int (*request)(struct p9_client *client, struct p9_req_t *req);
int (*cancelled)(struct p9_client *, struct p9_req_t *req); int (*cancel)(struct p9_client *client, struct p9_req_t *req);
int (*zc_request)(struct p9_client *, struct p9_req_t *, int (*cancelled)(struct p9_client *client, struct p9_req_t *req);
struct iov_iter *, struct iov_iter *, int , int, int); int (*zc_request)(struct p9_client *client, struct p9_req_t *req,
int (*show_options)(struct seq_file *, struct p9_client *); struct iov_iter *uidata, struct iov_iter *uodata,
int inlen, int outlen, int in_hdr_len);
int (*show_options)(struct seq_file *m, struct p9_client *client);
}; };
void v9fs_register_trans(struct p9_trans_module *m); void v9fs_register_trans(struct p9_trans_module *m);
......
...@@ -30,8 +30,7 @@ ...@@ -30,8 +30,7 @@
#define DEFAULT_MSIZE (128 * 1024) #define DEFAULT_MSIZE (128 * 1024)
/* /* Client Option Parsing (code inspired by NFS code)
* Client Option Parsing (code inspired by NFS code)
* - a little lazy - parse all client options * - a little lazy - parse all client options
*/ */
...@@ -87,20 +86,18 @@ int p9_show_client_options(struct seq_file *m, struct p9_client *clnt) ...@@ -87,20 +86,18 @@ int p9_show_client_options(struct seq_file *m, struct p9_client *clnt)
} }
EXPORT_SYMBOL(p9_show_client_options); EXPORT_SYMBOL(p9_show_client_options);
/* /* Some error codes are taken directly from the server replies,
* Some error codes are taken directly from the server replies,
* make sure they are valid. * make sure they are valid.
*/ */
static int safe_errno(int err) static int safe_errno(int err)
{ {
if ((err > 0) || (err < -MAX_ERRNO)) { if (err > 0 || err < -MAX_ERRNO) {
p9_debug(P9_DEBUG_ERROR, "Invalid error code %d\n", err); p9_debug(P9_DEBUG_ERROR, "Invalid error code %d\n", err);
return -EPROTO; return -EPROTO;
} }
return err; return err;
} }
/* Interpret mount option for protocol version */ /* Interpret mount option for protocol version */
static int get_protocol_version(char *s) static int get_protocol_version(char *s)
{ {
...@@ -115,8 +112,9 @@ static int get_protocol_version(char *s) ...@@ -115,8 +112,9 @@ static int get_protocol_version(char *s)
} else if (!strcmp(s, "9p2000.L")) { } else if (!strcmp(s, "9p2000.L")) {
version = p9_proto_2000L; version = p9_proto_2000L;
p9_debug(P9_DEBUG_9P, "Protocol version: 9P2000.L\n"); p9_debug(P9_DEBUG_9P, "Protocol version: 9P2000.L\n");
} else } else {
pr_info("Unknown protocol version %s\n", s); pr_info("Unknown protocol version %s\n", s);
}
return version; return version;
} }
...@@ -145,15 +143,13 @@ static int parse_opts(char *opts, struct p9_client *clnt) ...@@ -145,15 +143,13 @@ static int parse_opts(char *opts, struct p9_client *clnt)
return 0; return 0;
tmp_options = kstrdup(opts, GFP_KERNEL); tmp_options = kstrdup(opts, GFP_KERNEL);
if (!tmp_options) { if (!tmp_options)
p9_debug(P9_DEBUG_ERROR,
"failed to allocate copy of option string\n");
return -ENOMEM; return -ENOMEM;
}
options = tmp_options; options = tmp_options;
while ((p = strsep(&options, ",")) != NULL) { while ((p = strsep(&options, ",")) != NULL) {
int token, r; int token, r;
if (!*p) if (!*p)
continue; continue;
token = match_token(p, tokens, args); token = match_token(p, tokens, args);
...@@ -185,7 +181,7 @@ static int parse_opts(char *opts, struct p9_client *clnt) ...@@ -185,7 +181,7 @@ static int parse_opts(char *opts, struct p9_client *clnt)
v9fs_put_trans(clnt->trans_mod); v9fs_put_trans(clnt->trans_mod);
clnt->trans_mod = v9fs_get_trans_by_name(s); clnt->trans_mod = v9fs_get_trans_by_name(s);
if (clnt->trans_mod == NULL) { if (!clnt->trans_mod) {
pr_info("Could not find request transport: %s\n", pr_info("Could not find request transport: %s\n",
s); s);
ret = -EINVAL; ret = -EINVAL;
...@@ -377,6 +373,7 @@ static int p9_tag_remove(struct p9_client *c, struct p9_req_t *r) ...@@ -377,6 +373,7 @@ static int p9_tag_remove(struct p9_client *c, struct p9_req_t *r)
static void p9_req_free(struct kref *ref) static void p9_req_free(struct kref *ref)
{ {
struct p9_req_t *r = container_of(ref, struct p9_req_t, refcount); struct p9_req_t *r = container_of(ref, struct p9_req_t, refcount);
p9_fcall_fini(&r->tc); p9_fcall_fini(&r->tc);
p9_fcall_fini(&r->rc); p9_fcall_fini(&r->rc);
kmem_cache_free(p9_req_cache, r); kmem_cache_free(p9_req_cache, r);
...@@ -421,8 +418,7 @@ void p9_client_cb(struct p9_client *c, struct p9_req_t *req, int status) ...@@ -421,8 +418,7 @@ void p9_client_cb(struct p9_client *c, struct p9_req_t *req, int status)
{ {
p9_debug(P9_DEBUG_MUX, " tag %d\n", req->tc.tag); p9_debug(P9_DEBUG_MUX, " tag %d\n", req->tc.tag);
/* /* This barrier is needed to make sure any change made to req before
* This barrier is needed to make sure any change made to req before
* the status change is visible to another thread * the status change is visible to another thread
*/ */
smp_wmb(); smp_wmb();
...@@ -444,12 +440,12 @@ EXPORT_SYMBOL(p9_client_cb); ...@@ -444,12 +440,12 @@ EXPORT_SYMBOL(p9_client_cb);
*/ */
int int
p9_parse_header(struct p9_fcall *pdu, int32_t *size, int8_t *type, int16_t *tag, p9_parse_header(struct p9_fcall *pdu, int32_t *size, int8_t *type,
int rewind) int16_t *tag, int rewind)
{ {
int8_t r_type; s8 r_type;
int16_t r_tag; s16 r_tag;
int32_t r_size; s32 r_size;
int offset = pdu->offset; int offset = pdu->offset;
int err; int err;
...@@ -497,7 +493,7 @@ EXPORT_SYMBOL(p9_parse_header); ...@@ -497,7 +493,7 @@ EXPORT_SYMBOL(p9_parse_header);
static int p9_check_errors(struct p9_client *c, struct p9_req_t *req) static int p9_check_errors(struct p9_client *c, struct p9_req_t *req)
{ {
int8_t type; s8 type;
int err; int err;
int ecode; int ecode;
...@@ -508,8 +504,7 @@ static int p9_check_errors(struct p9_client *c, struct p9_req_t *req) ...@@ -508,8 +504,7 @@ static int p9_check_errors(struct p9_client *c, struct p9_req_t *req)
req->rc.size); req->rc.size);
return -EIO; return -EIO;
} }
/* /* dump the response from server
* dump the response from server
* This should be after check errors which poplulate pdu_fcall. * This should be after check errors which poplulate pdu_fcall.
*/ */
trace_9p_protocol_dump(c, &req->rc); trace_9p_protocol_dump(c, &req->rc);
...@@ -522,6 +517,7 @@ static int p9_check_errors(struct p9_client *c, struct p9_req_t *req) ...@@ -522,6 +517,7 @@ static int p9_check_errors(struct p9_client *c, struct p9_req_t *req)
if (!p9_is_proto_dotl(c)) { if (!p9_is_proto_dotl(c)) {
char *ename; char *ename;
err = p9pdu_readf(&req->rc, c->proto_version, "s?d", err = p9pdu_readf(&req->rc, c->proto_version, "s?d",
&ename, &ecode); &ename, &ecode);
if (err) if (err)
...@@ -572,12 +568,11 @@ static int p9_check_zc_errors(struct p9_client *c, struct p9_req_t *req, ...@@ -572,12 +568,11 @@ static int p9_check_zc_errors(struct p9_client *c, struct p9_req_t *req,
{ {
int err; int err;
int ecode; int ecode;
int8_t type; s8 type;
char *ename = NULL; char *ename = NULL;
err = p9_parse_header(&req->rc, NULL, &type, NULL, 0); err = p9_parse_header(&req->rc, NULL, &type, NULL, 0);
/* /* dump the response from server
* dump the response from server
* This should be after parse_header which poplulate pdu_fcall. * This should be after parse_header which poplulate pdu_fcall.
*/ */
trace_9p_protocol_dump(c, &req->rc); trace_9p_protocol_dump(c, &req->rc);
...@@ -657,7 +652,7 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...); ...@@ -657,7 +652,7 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...);
static int p9_client_flush(struct p9_client *c, struct p9_req_t *oldreq) static int p9_client_flush(struct p9_client *c, struct p9_req_t *oldreq)
{ {
struct p9_req_t *req; struct p9_req_t *req;
int16_t oldtag; s16 oldtag;
int err; int err;
err = p9_parse_header(&oldreq->tc, NULL, NULL, &oldtag, 1); err = p9_parse_header(&oldreq->tc, NULL, NULL, &oldtag, 1);
...@@ -670,8 +665,7 @@ static int p9_client_flush(struct p9_client *c, struct p9_req_t *oldreq) ...@@ -670,8 +665,7 @@ static int p9_client_flush(struct p9_client *c, struct p9_req_t *oldreq)
if (IS_ERR(req)) if (IS_ERR(req))
return PTR_ERR(req); return PTR_ERR(req);
/* /* if we haven't received a response for oldreq,
* if we haven't received a response for oldreq,
* remove it from the list * remove it from the list
*/ */
if (oldreq->status == REQ_STATUS_SENT) { if (oldreq->status == REQ_STATUS_SENT) {
...@@ -697,7 +691,7 @@ static struct p9_req_t *p9_client_prepare_req(struct p9_client *c, ...@@ -697,7 +691,7 @@ static struct p9_req_t *p9_client_prepare_req(struct p9_client *c,
return ERR_PTR(-EIO); return ERR_PTR(-EIO);
/* if status is begin_disconnected we allow only clunk request */ /* if status is begin_disconnected we allow only clunk request */
if ((c->status == BeginDisconnect) && (type != P9_TCLUNK)) if (c->status == BeginDisconnect && type != P9_TCLUNK)
return ERR_PTR(-EIO); return ERR_PTR(-EIO);
req = p9_tag_alloc(c, type, req_size); req = p9_tag_alloc(c, type, req_size);
...@@ -745,8 +739,9 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...) ...@@ -745,8 +739,9 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...)
if (signal_pending(current)) { if (signal_pending(current)) {
sigpending = 1; sigpending = 1;
clear_thread_flag(TIF_SIGPENDING); clear_thread_flag(TIF_SIGPENDING);
} else } else {
sigpending = 0; sigpending = 0;
}
err = c->trans_mod->request(c, req); err = c->trans_mod->request(c, req);
if (err < 0) { if (err < 0) {
...@@ -760,14 +755,13 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...) ...@@ -760,14 +755,13 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...)
/* Wait for the response */ /* Wait for the response */
err = wait_event_killable(req->wq, req->status >= REQ_STATUS_RCVD); err = wait_event_killable(req->wq, req->status >= REQ_STATUS_RCVD);
/* /* Make sure our req is coherent with regard to updates in other
* Make sure our req is coherent with regard to updates in other
* threads - echoes to wmb() in the callback * threads - echoes to wmb() in the callback
*/ */
smp_rmb(); smp_rmb();
if ((err == -ERESTARTSYS) && (c->status == Connected) if (err == -ERESTARTSYS && c->status == Connected &&
&& (type == P9_TFLUSH)) { type == P9_TFLUSH) {
sigpending = 1; sigpending = 1;
clear_thread_flag(TIF_SIGPENDING); clear_thread_flag(TIF_SIGPENDING);
goto again; goto again;
...@@ -777,7 +771,7 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...) ...@@ -777,7 +771,7 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...)
p9_debug(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err); p9_debug(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err);
err = req->t_err; err = req->t_err;
} }
if ((err == -ERESTARTSYS) && (c->status == Connected)) { if (err == -ERESTARTSYS && c->status == Connected) {
p9_debug(P9_DEBUG_MUX, "flushing\n"); p9_debug(P9_DEBUG_MUX, "flushing\n");
sigpending = 1; sigpending = 1;
clear_thread_flag(TIF_SIGPENDING); clear_thread_flag(TIF_SIGPENDING);
...@@ -832,8 +826,7 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type, ...@@ -832,8 +826,7 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type,
struct p9_req_t *req; struct p9_req_t *req;
va_start(ap, fmt); va_start(ap, fmt);
/* /* We allocate a inline protocol data of only 4k bytes.
* We allocate a inline protocol data of only 4k bytes.
* The actual content is passed in zero-copy fashion. * The actual content is passed in zero-copy fashion.
*/ */
req = p9_client_prepare_req(c, type, P9_ZC_HDR_SZ, fmt, ap); req = p9_client_prepare_req(c, type, P9_ZC_HDR_SZ, fmt, ap);
...@@ -844,8 +837,9 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type, ...@@ -844,8 +837,9 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type,
if (signal_pending(current)) { if (signal_pending(current)) {
sigpending = 1; sigpending = 1;
clear_thread_flag(TIF_SIGPENDING); clear_thread_flag(TIF_SIGPENDING);
} else } else {
sigpending = 0; sigpending = 0;
}
err = c->trans_mod->zc_request(c, req, uidata, uodata, err = c->trans_mod->zc_request(c, req, uidata, uodata,
inlen, olen, in_hdrlen); inlen, olen, in_hdrlen);
...@@ -859,7 +853,7 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type, ...@@ -859,7 +853,7 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type,
p9_debug(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err); p9_debug(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err);
err = req->t_err; err = req->t_err;
} }
if ((err == -ERESTARTSYS) && (c->status == Connected)) { if (err == -ERESTARTSYS && c->status == Connected) {
p9_debug(P9_DEBUG_MUX, "flushing\n"); p9_debug(P9_DEBUG_MUX, "flushing\n");
sigpending = 1; sigpending = 1;
clear_thread_flag(TIF_SIGPENDING); clear_thread_flag(TIF_SIGPENDING);
...@@ -895,11 +889,11 @@ static struct p9_fid *p9_fid_create(struct p9_client *clnt) ...@@ -895,11 +889,11 @@ static struct p9_fid *p9_fid_create(struct p9_client *clnt)
struct p9_fid *fid; struct p9_fid *fid;
p9_debug(P9_DEBUG_FID, "clnt %p\n", clnt); p9_debug(P9_DEBUG_FID, "clnt %p\n", clnt);
fid = kmalloc(sizeof(struct p9_fid), GFP_KERNEL); fid = kmalloc(sizeof(*fid), GFP_KERNEL);
if (!fid) if (!fid)
return NULL; return NULL;
memset(&fid->qid, 0, sizeof(struct p9_qid)); memset(&fid->qid, 0, sizeof(fid->qid));
fid->mode = -1; fid->mode = -1;
fid->uid = current_fsuid(); fid->uid = current_fsuid();
fid->clnt = clnt; fid->clnt = clnt;
...@@ -972,13 +966,13 @@ static int p9_client_version(struct p9_client *c) ...@@ -972,13 +966,13 @@ static int p9_client_version(struct p9_client *c)
} }
p9_debug(P9_DEBUG_9P, "<<< RVERSION msize %d %s\n", msize, version); p9_debug(P9_DEBUG_9P, "<<< RVERSION msize %d %s\n", msize, version);
if (!strncmp(version, "9P2000.L", 8)) if (!strncmp(version, "9P2000.L", 8)) {
c->proto_version = p9_proto_2000L; c->proto_version = p9_proto_2000L;
else if (!strncmp(version, "9P2000.u", 8)) } else if (!strncmp(version, "9P2000.u", 8)) {
c->proto_version = p9_proto_2000u; c->proto_version = p9_proto_2000u;
else if (!strncmp(version, "9P2000", 6)) } else if (!strncmp(version, "9P2000", 6)) {
c->proto_version = p9_proto_legacy; c->proto_version = p9_proto_legacy;
else { } else {
p9_debug(P9_DEBUG_ERROR, p9_debug(P9_DEBUG_ERROR,
"server returned an unknown version: %s\n", version); "server returned an unknown version: %s\n", version);
err = -EREMOTEIO; err = -EREMOTEIO;
...@@ -1008,7 +1002,7 @@ struct p9_client *p9_client_create(const char *dev_name, char *options) ...@@ -1008,7 +1002,7 @@ struct p9_client *p9_client_create(const char *dev_name, char *options)
char *client_id; char *client_id;
err = 0; err = 0;
clnt = kmalloc(sizeof(struct p9_client), GFP_KERNEL); clnt = kmalloc(sizeof(*clnt), GFP_KERNEL);
if (!clnt) if (!clnt)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
...@@ -1030,7 +1024,7 @@ struct p9_client *p9_client_create(const char *dev_name, char *options) ...@@ -1030,7 +1024,7 @@ struct p9_client *p9_client_create(const char *dev_name, char *options)
if (!clnt->trans_mod) if (!clnt->trans_mod)
clnt->trans_mod = v9fs_get_default_trans(); clnt->trans_mod = v9fs_get_default_trans();
if (clnt->trans_mod == NULL) { if (!clnt->trans_mod) {
err = -EPROTONOSUPPORT; err = -EPROTONOSUPPORT;
p9_debug(P9_DEBUG_ERROR, p9_debug(P9_DEBUG_ERROR,
"No transport defined or default transport\n"); "No transport defined or default transport\n");
...@@ -1118,14 +1112,14 @@ void p9_client_begin_disconnect(struct p9_client *clnt) ...@@ -1118,14 +1112,14 @@ void p9_client_begin_disconnect(struct p9_client *clnt)
EXPORT_SYMBOL(p9_client_begin_disconnect); EXPORT_SYMBOL(p9_client_begin_disconnect);
struct p9_fid *p9_client_attach(struct p9_client *clnt, struct p9_fid *afid, struct p9_fid *p9_client_attach(struct p9_client *clnt, struct p9_fid *afid,
const char *uname, kuid_t n_uname, const char *aname) const char *uname, kuid_t n_uname,
const char *aname)
{ {
int err = 0; int err = 0;
struct p9_req_t *req; struct p9_req_t *req;
struct p9_fid *fid; struct p9_fid *fid;
struct p9_qid qid; struct p9_qid qid;
p9_debug(P9_DEBUG_9P, ">>> TATTACH afid %d uname %s aname %s\n", p9_debug(P9_DEBUG_9P, ">>> TATTACH afid %d uname %s aname %s\n",
afid ? afid->fid : -1, uname, aname); afid ? afid->fid : -1, uname, aname);
fid = p9_fid_create(clnt); fid = p9_fid_create(clnt);
...@@ -1150,7 +1144,7 @@ struct p9_fid *p9_client_attach(struct p9_client *clnt, struct p9_fid *afid, ...@@ -1150,7 +1144,7 @@ struct p9_fid *p9_client_attach(struct p9_client *clnt, struct p9_fid *afid,
} }
p9_debug(P9_DEBUG_9P, "<<< RATTACH qid %x.%llx.%x\n", p9_debug(P9_DEBUG_9P, "<<< RATTACH qid %x.%llx.%x\n",
qid.type, (unsigned long long)qid.path, qid.version); qid.type, qid.path, qid.version);
memmove(&fid->qid, &qid, sizeof(struct p9_qid)); memmove(&fid->qid, &qid, sizeof(struct p9_qid));
...@@ -1172,7 +1166,7 @@ struct p9_fid *p9_client_walk(struct p9_fid *oldfid, uint16_t nwname, ...@@ -1172,7 +1166,7 @@ struct p9_fid *p9_client_walk(struct p9_fid *oldfid, uint16_t nwname,
struct p9_fid *fid; struct p9_fid *fid;
struct p9_qid *wqids; struct p9_qid *wqids;
struct p9_req_t *req; struct p9_req_t *req;
uint16_t nwqids, count; u16 nwqids, count;
err = 0; err = 0;
wqids = NULL; wqids = NULL;
...@@ -1185,9 +1179,9 @@ struct p9_fid *p9_client_walk(struct p9_fid *oldfid, uint16_t nwname, ...@@ -1185,9 +1179,9 @@ struct p9_fid *p9_client_walk(struct p9_fid *oldfid, uint16_t nwname,
} }
fid->uid = oldfid->uid; fid->uid = oldfid->uid;
} else } else {
fid = oldfid; fid = oldfid;
}
p9_debug(P9_DEBUG_9P, ">>> TWALK fids %d,%d nwname %ud wname[0] %s\n", p9_debug(P9_DEBUG_9P, ">>> TWALK fids %d,%d nwname %ud wname[0] %s\n",
oldfid->fid, fid->fid, nwname, wnames ? wnames[0] : NULL); oldfid->fid, fid->fid, nwname, wnames ? wnames[0] : NULL);
...@@ -1216,7 +1210,7 @@ struct p9_fid *p9_client_walk(struct p9_fid *oldfid, uint16_t nwname, ...@@ -1216,7 +1210,7 @@ struct p9_fid *p9_client_walk(struct p9_fid *oldfid, uint16_t nwname,
for (count = 0; count < nwqids; count++) for (count = 0; count < nwqids; count++)
p9_debug(P9_DEBUG_9P, "<<< [%d] %x.%llx.%x\n", p9_debug(P9_DEBUG_9P, "<<< [%d] %x.%llx.%x\n",
count, wqids[count].type, count, wqids[count].type,
(unsigned long long)wqids[count].path, wqids[count].path,
wqids[count].version); wqids[count].version);
if (nwname) if (nwname)
...@@ -1233,7 +1227,7 @@ struct p9_fid *p9_client_walk(struct p9_fid *oldfid, uint16_t nwname, ...@@ -1233,7 +1227,7 @@ struct p9_fid *p9_client_walk(struct p9_fid *oldfid, uint16_t nwname,
fid = NULL; fid = NULL;
error: error:
if (fid && (fid != oldfid)) if (fid && fid != oldfid)
p9_fid_destroy(fid); p9_fid_destroy(fid);
return ERR_PTR(err); return ERR_PTR(err);
...@@ -1273,7 +1267,7 @@ int p9_client_open(struct p9_fid *fid, int mode) ...@@ -1273,7 +1267,7 @@ int p9_client_open(struct p9_fid *fid, int mode)
p9_debug(P9_DEBUG_9P, "<<< %s qid %x.%llx.%x iounit %x\n", p9_debug(P9_DEBUG_9P, "<<< %s qid %x.%llx.%x iounit %x\n",
p9_is_proto_dotl(clnt) ? "RLOPEN" : "ROPEN", qid.type, p9_is_proto_dotl(clnt) ? "RLOPEN" : "ROPEN", qid.type,
(unsigned long long)qid.path, qid.version, iounit); qid.path, qid.version, iounit);
memmove(&fid->qid, &qid, sizeof(struct p9_qid)); memmove(&fid->qid, &qid, sizeof(struct p9_qid));
fid->mode = mode; fid->mode = mode;
...@@ -1286,8 +1280,8 @@ int p9_client_open(struct p9_fid *fid, int mode) ...@@ -1286,8 +1280,8 @@ int p9_client_open(struct p9_fid *fid, int mode)
} }
EXPORT_SYMBOL(p9_client_open); EXPORT_SYMBOL(p9_client_open);
int p9_client_create_dotl(struct p9_fid *ofid, const char *name, u32 flags, u32 mode, int p9_client_create_dotl(struct p9_fid *ofid, const char *name, u32 flags,
kgid_t gid, struct p9_qid *qid) u32 mode, kgid_t gid, struct p9_qid *qid)
{ {
int err = 0; int err = 0;
struct p9_client *clnt; struct p9_client *clnt;
...@@ -1317,9 +1311,7 @@ int p9_client_create_dotl(struct p9_fid *ofid, const char *name, u32 flags, u32 ...@@ -1317,9 +1311,7 @@ int p9_client_create_dotl(struct p9_fid *ofid, const char *name, u32 flags, u32
} }
p9_debug(P9_DEBUG_9P, "<<< RLCREATE qid %x.%llx.%x iounit %x\n", p9_debug(P9_DEBUG_9P, "<<< RLCREATE qid %x.%llx.%x iounit %x\n",
qid->type, qid->type, qid->path, qid->version, iounit);
(unsigned long long)qid->path,
qid->version, iounit);
memmove(&ofid->qid, qid, sizeof(struct p9_qid)); memmove(&ofid->qid, qid, sizeof(struct p9_qid));
ofid->mode = mode; ofid->mode = mode;
...@@ -1363,9 +1355,7 @@ int p9_client_fcreate(struct p9_fid *fid, const char *name, u32 perm, int mode, ...@@ -1363,9 +1355,7 @@ int p9_client_fcreate(struct p9_fid *fid, const char *name, u32 perm, int mode,
} }
p9_debug(P9_DEBUG_9P, "<<< RCREATE qid %x.%llx.%x iounit %x\n", p9_debug(P9_DEBUG_9P, "<<< RCREATE qid %x.%llx.%x iounit %x\n",
qid.type, qid.type, qid.path, qid.version, iounit);
(unsigned long long)qid.path,
qid.version, iounit);
memmove(&fid->qid, &qid, sizeof(struct p9_qid)); memmove(&fid->qid, &qid, sizeof(struct p9_qid));
fid->mode = mode; fid->mode = mode;
...@@ -1403,7 +1393,7 @@ int p9_client_symlink(struct p9_fid *dfid, const char *name, ...@@ -1403,7 +1393,7 @@ int p9_client_symlink(struct p9_fid *dfid, const char *name,
} }
p9_debug(P9_DEBUG_9P, "<<< RSYMLINK qid %x.%llx.%x\n", p9_debug(P9_DEBUG_9P, "<<< RSYMLINK qid %x.%llx.%x\n",
qid->type, (unsigned long long)qid->path, qid->version); qid->type, qid->path, qid->version);
free_and_error: free_and_error:
p9_tag_remove(clnt, req); p9_tag_remove(clnt, req);
...@@ -1474,8 +1464,8 @@ int p9_client_clunk(struct p9_fid *fid) ...@@ -1474,8 +1464,8 @@ int p9_client_clunk(struct p9_fid *fid)
return 0; return 0;
again: again:
p9_debug(P9_DEBUG_9P, ">>> TCLUNK fid %d (try %d)\n", fid->fid, p9_debug(P9_DEBUG_9P, ">>> TCLUNK fid %d (try %d)\n",
retries); fid->fid, retries);
err = 0; err = 0;
clnt = fid->clnt; clnt = fid->clnt;
...@@ -1489,16 +1479,16 @@ int p9_client_clunk(struct p9_fid *fid) ...@@ -1489,16 +1479,16 @@ int p9_client_clunk(struct p9_fid *fid)
p9_tag_remove(clnt, req); p9_tag_remove(clnt, req);
error: error:
/* /* Fid is not valid even after a failed clunk
* Fid is not valid even after a failed clunk
* If interrupted, retry once then give up and * If interrupted, retry once then give up and
* leak fid until umount. * leak fid until umount.
*/ */
if (err == -ERESTARTSYS) { if (err == -ERESTARTSYS) {
if (retries++ == 0) if (retries++ == 0)
goto again; goto again;
} else } else {
p9_fid_destroy(fid); p9_fid_destroy(fid);
}
return err; return err;
} }
EXPORT_SYMBOL(p9_client_clunk); EXPORT_SYMBOL(p9_client_clunk);
...@@ -1584,8 +1574,8 @@ p9_client_read_once(struct p9_fid *fid, u64 offset, struct iov_iter *to, ...@@ -1584,8 +1574,8 @@ p9_client_read_once(struct p9_fid *fid, u64 offset, struct iov_iter *to,
char *dataptr; char *dataptr;
*err = 0; *err = 0;
p9_debug(P9_DEBUG_9P, ">>> TREAD fid %d offset %llu %d\n", p9_debug(P9_DEBUG_9P, ">>> TREAD fid %d offset %llu %zu\n",
fid->fid, (unsigned long long) offset, (int)iov_iter_count(to)); fid->fid, offset, iov_iter_count(to));
rsize = fid->iounit; rsize = fid->iounit;
if (!rsize || rsize > clnt->msize - P9_IOHDRSZ) if (!rsize || rsize > clnt->msize - P9_IOHDRSZ)
...@@ -1651,13 +1641,13 @@ p9_client_write(struct p9_fid *fid, u64 offset, struct iov_iter *from, int *err) ...@@ -1651,13 +1641,13 @@ p9_client_write(struct p9_fid *fid, u64 offset, struct iov_iter *from, int *err)
*err = 0; *err = 0;
p9_debug(P9_DEBUG_9P, ">>> TWRITE fid %d offset %llu count %zd\n", p9_debug(P9_DEBUG_9P, ">>> TWRITE fid %d offset %llu count %zd\n",
fid->fid, (unsigned long long) offset, fid->fid, offset, iov_iter_count(from));
iov_iter_count(from));
while (iov_iter_count(from)) { while (iov_iter_count(from)) {
int count = iov_iter_count(from); int count = iov_iter_count(from);
int rsize = fid->iounit; int rsize = fid->iounit;
if (!rsize || rsize > clnt->msize-P9_IOHDRSZ)
if (!rsize || rsize > clnt->msize - P9_IOHDRSZ)
rsize = clnt->msize - P9_IOHDRSZ; rsize = clnt->msize - P9_IOHDRSZ;
if (count < rsize) if (count < rsize)
...@@ -1703,12 +1693,13 @@ struct p9_wstat *p9_client_stat(struct p9_fid *fid) ...@@ -1703,12 +1693,13 @@ struct p9_wstat *p9_client_stat(struct p9_fid *fid)
{ {
int err; int err;
struct p9_client *clnt; struct p9_client *clnt;
struct p9_wstat *ret = kmalloc(sizeof(struct p9_wstat), GFP_KERNEL); struct p9_wstat *ret;
struct p9_req_t *req; struct p9_req_t *req;
u16 ignored; u16 ignored;
p9_debug(P9_DEBUG_9P, ">>> TSTAT fid %d\n", fid->fid); p9_debug(P9_DEBUG_9P, ">>> TSTAT fid %d\n", fid->fid);
ret = kmalloc(sizeof(*ret), GFP_KERNEL);
if (!ret) if (!ret)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
...@@ -1733,9 +1724,9 @@ struct p9_wstat *p9_client_stat(struct p9_fid *fid) ...@@ -1733,9 +1724,9 @@ struct p9_wstat *p9_client_stat(struct p9_fid *fid)
"<<< mode=%8.8x atime=%8.8x mtime=%8.8x length=%llx\n" "<<< mode=%8.8x atime=%8.8x mtime=%8.8x length=%llx\n"
"<<< name=%s uid=%s gid=%s muid=%s extension=(%s)\n" "<<< name=%s uid=%s gid=%s muid=%s extension=(%s)\n"
"<<< uid=%d gid=%d n_muid=%d\n", "<<< uid=%d gid=%d n_muid=%d\n",
ret->size, ret->type, ret->dev, ret->qid.type, ret->size, ret->type, ret->dev, ret->qid.type, ret->qid.path,
(unsigned long long)ret->qid.path, ret->qid.version, ret->mode, ret->qid.version, ret->mode,
ret->atime, ret->mtime, (unsigned long long)ret->length, ret->atime, ret->mtime, ret->length,
ret->name, ret->uid, ret->gid, ret->muid, ret->extension, ret->name, ret->uid, ret->gid, ret->muid, ret->extension,
from_kuid(&init_user_ns, ret->n_uid), from_kuid(&init_user_ns, ret->n_uid),
from_kgid(&init_user_ns, ret->n_gid), from_kgid(&init_user_ns, ret->n_gid),
...@@ -1755,13 +1746,13 @@ struct p9_stat_dotl *p9_client_getattr_dotl(struct p9_fid *fid, ...@@ -1755,13 +1746,13 @@ struct p9_stat_dotl *p9_client_getattr_dotl(struct p9_fid *fid,
{ {
int err; int err;
struct p9_client *clnt; struct p9_client *clnt;
struct p9_stat_dotl *ret = kmalloc(sizeof(struct p9_stat_dotl), struct p9_stat_dotl *ret;
GFP_KERNEL);
struct p9_req_t *req; struct p9_req_t *req;
p9_debug(P9_DEBUG_9P, ">>> TGETATTR fid %d, request_mask %lld\n", p9_debug(P9_DEBUG_9P, ">>> TGETATTR fid %d, request_mask %lld\n",
fid->fid, request_mask); fid->fid, request_mask);
ret = kmalloc(sizeof(*ret), GFP_KERNEL);
if (!ret) if (!ret)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
...@@ -1781,8 +1772,7 @@ struct p9_stat_dotl *p9_client_getattr_dotl(struct p9_fid *fid, ...@@ -1781,8 +1772,7 @@ struct p9_stat_dotl *p9_client_getattr_dotl(struct p9_fid *fid,
goto error; goto error;
} }
p9_debug(P9_DEBUG_9P, p9_debug(P9_DEBUG_9P, "<<< RGETATTR st_result_mask=%lld\n"
"<<< RGETATTR st_result_mask=%lld\n"
"<<< qid=%x.%llx.%x\n" "<<< qid=%x.%llx.%x\n"
"<<< st_mode=%8.8x st_nlink=%llu\n" "<<< st_mode=%8.8x st_nlink=%llu\n"
"<<< st_uid=%d st_gid=%d\n" "<<< st_uid=%d st_gid=%d\n"
...@@ -1792,14 +1782,16 @@ struct p9_stat_dotl *p9_client_getattr_dotl(struct p9_fid *fid, ...@@ -1792,14 +1782,16 @@ struct p9_stat_dotl *p9_client_getattr_dotl(struct p9_fid *fid,
"<<< st_ctime_sec=%lld st_ctime_nsec=%lld\n" "<<< st_ctime_sec=%lld st_ctime_nsec=%lld\n"
"<<< st_btime_sec=%lld st_btime_nsec=%lld\n" "<<< st_btime_sec=%lld st_btime_nsec=%lld\n"
"<<< st_gen=%lld st_data_version=%lld\n", "<<< st_gen=%lld st_data_version=%lld\n",
ret->st_result_mask, ret->qid.type, ret->qid.path, ret->st_result_mask,
ret->qid.version, ret->st_mode, ret->st_nlink, ret->qid.type, ret->qid.path, ret->qid.version,
ret->st_mode, ret->st_nlink,
from_kuid(&init_user_ns, ret->st_uid), from_kuid(&init_user_ns, ret->st_uid),
from_kgid(&init_user_ns, ret->st_gid), from_kgid(&init_user_ns, ret->st_gid),
ret->st_rdev, ret->st_size, ret->st_blksize, ret->st_rdev, ret->st_size, ret->st_blksize, ret->st_blocks,
ret->st_blocks, ret->st_atime_sec, ret->st_atime_nsec, ret->st_atime_sec, ret->st_atime_nsec,
ret->st_mtime_sec, ret->st_mtime_nsec, ret->st_ctime_sec, ret->st_mtime_sec, ret->st_mtime_nsec,
ret->st_ctime_nsec, ret->st_btime_sec, ret->st_btime_nsec, ret->st_ctime_sec, ret->st_ctime_nsec,
ret->st_btime_sec, ret->st_btime_nsec,
ret->st_gen, ret->st_data_version); ret->st_gen, ret->st_data_version);
p9_tag_remove(clnt, req); p9_tag_remove(clnt, req);
...@@ -1819,7 +1811,7 @@ static int p9_client_statsize(struct p9_wstat *wst, int proto_version) ...@@ -1819,7 +1811,7 @@ static int p9_client_statsize(struct p9_wstat *wst, int proto_version)
/* size[2] type[2] dev[4] qid[13] */ /* size[2] type[2] dev[4] qid[13] */
/* mode[4] atime[4] mtime[4] length[8]*/ /* mode[4] atime[4] mtime[4] length[8]*/
/* name[s] uid[s] gid[s] muid[s] */ /* name[s] uid[s] gid[s] muid[s] */
ret = 2+4+13+4+4+4+8+2+2+2+2; ret = 2 + 4 + 13 + 4 + 4 + 4 + 8 + 2 + 2 + 2 + 2;
if (wst->name) if (wst->name)
ret += strlen(wst->name); ret += strlen(wst->name);
...@@ -1830,9 +1822,10 @@ static int p9_client_statsize(struct p9_wstat *wst, int proto_version) ...@@ -1830,9 +1822,10 @@ static int p9_client_statsize(struct p9_wstat *wst, int proto_version)
if (wst->muid) if (wst->muid)
ret += strlen(wst->muid); ret += strlen(wst->muid);
if ((proto_version == p9_proto_2000u) || if (proto_version == p9_proto_2000u ||
(proto_version == p9_proto_2000L)) { proto_version == p9_proto_2000L) {
ret += 2+4+4+4; /* extension[s] n_uid[4] n_gid[4] n_muid[4] */ /* extension[s] n_uid[4] n_gid[4] n_muid[4] */
ret += 2 + 4 + 4 + 4;
if (wst->extension) if (wst->extension)
ret += strlen(wst->extension); ret += strlen(wst->extension);
} }
...@@ -1849,21 +1842,23 @@ int p9_client_wstat(struct p9_fid *fid, struct p9_wstat *wst) ...@@ -1849,21 +1842,23 @@ int p9_client_wstat(struct p9_fid *fid, struct p9_wstat *wst)
err = 0; err = 0;
clnt = fid->clnt; clnt = fid->clnt;
wst->size = p9_client_statsize(wst, clnt->proto_version); wst->size = p9_client_statsize(wst, clnt->proto_version);
p9_debug(P9_DEBUG_9P, ">>> TWSTAT fid %d\n", fid->fid); p9_debug(P9_DEBUG_9P, ">>> TWSTAT fid %d\n",
fid->fid);
p9_debug(P9_DEBUG_9P, p9_debug(P9_DEBUG_9P,
" sz=%x type=%x dev=%x qid=%x.%llx.%x\n" " sz=%x type=%x dev=%x qid=%x.%llx.%x\n"
" mode=%8.8x atime=%8.8x mtime=%8.8x length=%llx\n" " mode=%8.8x atime=%8.8x mtime=%8.8x length=%llx\n"
" name=%s uid=%s gid=%s muid=%s extension=(%s)\n" " name=%s uid=%s gid=%s muid=%s extension=(%s)\n"
" uid=%d gid=%d n_muid=%d\n", " uid=%d gid=%d n_muid=%d\n",
wst->size, wst->type, wst->dev, wst->qid.type, wst->size, wst->type, wst->dev, wst->qid.type,
(unsigned long long)wst->qid.path, wst->qid.version, wst->mode, wst->qid.path, wst->qid.version,
wst->atime, wst->mtime, (unsigned long long)wst->length, wst->mode, wst->atime, wst->mtime, wst->length,
wst->name, wst->uid, wst->gid, wst->muid, wst->extension, wst->name, wst->uid, wst->gid, wst->muid, wst->extension,
from_kuid(&init_user_ns, wst->n_uid), from_kuid(&init_user_ns, wst->n_uid),
from_kgid(&init_user_ns, wst->n_gid), from_kgid(&init_user_ns, wst->n_gid),
from_kuid(&init_user_ns, wst->n_muid)); from_kuid(&init_user_ns, wst->n_muid));
req = p9_client_rpc(clnt, P9_TWSTAT, "dwS", fid->fid, wst->size+2, wst); req = p9_client_rpc(clnt, P9_TWSTAT, "dwS",
fid->fid, wst->size + 2, wst);
if (IS_ERR(req)) { if (IS_ERR(req)) {
err = PTR_ERR(req); err = PTR_ERR(req);
goto error; goto error;
...@@ -1886,14 +1881,14 @@ int p9_client_setattr(struct p9_fid *fid, struct p9_iattr_dotl *p9attr) ...@@ -1886,14 +1881,14 @@ int p9_client_setattr(struct p9_fid *fid, struct p9_iattr_dotl *p9attr)
err = 0; err = 0;
clnt = fid->clnt; clnt = fid->clnt;
p9_debug(P9_DEBUG_9P, ">>> TSETATTR fid %d\n", fid->fid); p9_debug(P9_DEBUG_9P, ">>> TSETATTR fid %d\n", fid->fid);
p9_debug(P9_DEBUG_9P, p9_debug(P9_DEBUG_9P, " valid=%x mode=%x uid=%d gid=%d size=%lld\n",
" valid=%x mode=%x uid=%d gid=%d size=%lld\n"
" atime_sec=%lld atime_nsec=%lld\n"
" mtime_sec=%lld mtime_nsec=%lld\n",
p9attr->valid, p9attr->mode, p9attr->valid, p9attr->mode,
from_kuid(&init_user_ns, p9attr->uid), from_kuid(&init_user_ns, p9attr->uid),
from_kgid(&init_user_ns, p9attr->gid), from_kgid(&init_user_ns, p9attr->gid),
p9attr->size, p9attr->atime_sec, p9attr->atime_nsec, p9attr->size);
p9_debug(P9_DEBUG_9P, " atime_sec=%lld atime_nsec=%lld\n",
p9attr->atime_sec, p9attr->atime_nsec);
p9_debug(P9_DEBUG_9P, " mtime_sec=%lld mtime_nsec=%lld\n",
p9attr->mtime_sec, p9attr->mtime_nsec); p9attr->mtime_sec, p9attr->mtime_nsec);
req = p9_client_rpc(clnt, P9_TSETATTR, "dI", fid->fid, p9attr); req = p9_client_rpc(clnt, P9_TSETATTR, "dI", fid->fid, p9attr);
...@@ -1935,12 +1930,10 @@ int p9_client_statfs(struct p9_fid *fid, struct p9_rstatfs *sb) ...@@ -1935,12 +1930,10 @@ int p9_client_statfs(struct p9_fid *fid, struct p9_rstatfs *sb)
goto error; goto error;
} }
p9_debug(P9_DEBUG_9P, "<<< RSTATFS fid %d type 0x%lx bsize %ld " p9_debug(P9_DEBUG_9P,
"blocks %llu bfree %llu bavail %llu files %llu ffree %llu " "<<< RSTATFS fid %d type 0x%x bsize %u blocks %llu bfree %llu bavail %llu files %llu ffree %llu fsid %llu namelen %u\n",
"fsid %llu namelen %ld\n", fid->fid, sb->type, sb->bsize, sb->blocks, sb->bfree,
fid->fid, (long unsigned int)sb->type, (long int)sb->bsize, sb->bavail, sb->files, sb->ffree, sb->fsid, sb->namelen);
sb->blocks, sb->bfree, sb->bavail, sb->files, sb->ffree,
sb->fsid, (long int)sb->namelen);
p9_tag_remove(clnt, req); p9_tag_remove(clnt, req);
error: error:
...@@ -1986,9 +1979,9 @@ int p9_client_renameat(struct p9_fid *olddirfid, const char *old_name, ...@@ -1986,9 +1979,9 @@ int p9_client_renameat(struct p9_fid *olddirfid, const char *old_name,
err = 0; err = 0;
clnt = olddirfid->clnt; clnt = olddirfid->clnt;
p9_debug(P9_DEBUG_9P, ">>> TRENAMEAT olddirfid %d old name %s" p9_debug(P9_DEBUG_9P,
" newdirfid %d new name %s\n", olddirfid->fid, old_name, ">>> TRENAMEAT olddirfid %d old name %s newdirfid %d new name %s\n",
newdirfid->fid, new_name); olddirfid->fid, old_name, newdirfid->fid, new_name);
req = p9_client_rpc(clnt, P9_TRENAMEAT, "dsds", olddirfid->fid, req = p9_client_rpc(clnt, P9_TRENAMEAT, "dsds", olddirfid->fid,
old_name, newdirfid->fid, new_name); old_name, newdirfid->fid, new_name);
...@@ -2006,8 +1999,7 @@ int p9_client_renameat(struct p9_fid *olddirfid, const char *old_name, ...@@ -2006,8 +1999,7 @@ int p9_client_renameat(struct p9_fid *olddirfid, const char *old_name,
} }
EXPORT_SYMBOL(p9_client_renameat); EXPORT_SYMBOL(p9_client_renameat);
/* /* An xattrwalk without @attr_name gives the fid for the lisxattr namespace
* An xattrwalk without @attr_name gives the fid for the lisxattr namespace
*/ */
struct p9_fid *p9_client_xattrwalk(struct p9_fid *file_fid, struct p9_fid *p9_client_xattrwalk(struct p9_fid *file_fid,
const char *attr_name, u64 *attr_size) const char *attr_name, u64 *attr_size)
...@@ -2048,7 +2040,7 @@ struct p9_fid *p9_client_xattrwalk(struct p9_fid *file_fid, ...@@ -2048,7 +2040,7 @@ struct p9_fid *p9_client_xattrwalk(struct p9_fid *file_fid,
p9_client_clunk(attr_fid); p9_client_clunk(attr_fid);
attr_fid = NULL; attr_fid = NULL;
error: error:
if (attr_fid && (attr_fid != file_fid)) if (attr_fid && attr_fid != file_fid)
p9_fid_destroy(attr_fid); p9_fid_destroy(attr_fid);
return ERR_PTR(err); return ERR_PTR(err);
...@@ -2063,8 +2055,8 @@ int p9_client_xattrcreate(struct p9_fid *fid, const char *name, ...@@ -2063,8 +2055,8 @@ int p9_client_xattrcreate(struct p9_fid *fid, const char *name,
struct p9_client *clnt; struct p9_client *clnt;
p9_debug(P9_DEBUG_9P, p9_debug(P9_DEBUG_9P,
">>> TXATTRCREATE fid %d name %s size %lld flag %d\n", ">>> TXATTRCREATE fid %d name %s size %llu flag %d\n",
fid->fid, name, (long long)attr_size, flags); fid->fid, name, attr_size, flags);
err = 0; err = 0;
clnt = fid->clnt; clnt = fid->clnt;
req = p9_client_rpc(clnt, P9_TXATTRCREATE, "dsqd", req = p9_client_rpc(clnt, P9_TXATTRCREATE, "dsqd",
...@@ -2092,13 +2084,13 @@ int p9_client_readdir(struct p9_fid *fid, char *data, u32 count, u64 offset) ...@@ -2092,13 +2084,13 @@ int p9_client_readdir(struct p9_fid *fid, char *data, u32 count, u64 offset)
iov_iter_kvec(&to, READ, &kv, 1, count); iov_iter_kvec(&to, READ, &kv, 1, count);
p9_debug(P9_DEBUG_9P, ">>> TREADDIR fid %d offset %llu count %d\n", p9_debug(P9_DEBUG_9P, ">>> TREADDIR fid %d offset %llu count %d\n",
fid->fid, (unsigned long long) offset, count); fid->fid, offset, count);
err = 0; err = 0;
clnt = fid->clnt; clnt = fid->clnt;
rsize = fid->iounit; rsize = fid->iounit;
if (!rsize || rsize > clnt->msize-P9_READDIRHDRSZ) if (!rsize || rsize > clnt->msize - P9_READDIRHDRSZ)
rsize = clnt->msize - P9_READDIRHDRSZ; rsize = clnt->msize - P9_READDIRHDRSZ;
if (count < rsize) if (count < rsize)
...@@ -2106,8 +2098,7 @@ int p9_client_readdir(struct p9_fid *fid, char *data, u32 count, u64 offset) ...@@ -2106,8 +2098,7 @@ int p9_client_readdir(struct p9_fid *fid, char *data, u32 count, u64 offset)
/* Don't bother zerocopy for small IO (< 1024) */ /* Don't bother zerocopy for small IO (< 1024) */
if (clnt->trans_mod->zc_request && rsize > 1024) { if (clnt->trans_mod->zc_request && rsize > 1024) {
/* /* response header len is 11
* response header len is 11
* PDU Header(7) + IO Size (4) * PDU Header(7) + IO Size (4)
*/ */
req = p9_client_zc_rpc(clnt, P9_TREADDIR, &to, NULL, rsize, 0, req = p9_client_zc_rpc(clnt, P9_TREADDIR, &to, NULL, rsize, 0,
...@@ -2156,8 +2147,9 @@ int p9_client_mknod_dotl(struct p9_fid *fid, const char *name, int mode, ...@@ -2156,8 +2147,9 @@ int p9_client_mknod_dotl(struct p9_fid *fid, const char *name, int mode,
err = 0; err = 0;
clnt = fid->clnt; clnt = fid->clnt;
p9_debug(P9_DEBUG_9P, ">>> TMKNOD fid %d name %s mode %d major %d " p9_debug(P9_DEBUG_9P,
"minor %d\n", fid->fid, name, mode, MAJOR(rdev), MINOR(rdev)); ">>> TMKNOD fid %d name %s mode %d major %d minor %d\n",
fid->fid, name, mode, MAJOR(rdev), MINOR(rdev));
req = p9_client_rpc(clnt, P9_TMKNOD, "dsdddg", fid->fid, name, mode, req = p9_client_rpc(clnt, P9_TMKNOD, "dsdddg", fid->fid, name, mode,
MAJOR(rdev), MINOR(rdev), gid); MAJOR(rdev), MINOR(rdev), gid);
if (IS_ERR(req)) if (IS_ERR(req))
...@@ -2168,13 +2160,12 @@ int p9_client_mknod_dotl(struct p9_fid *fid, const char *name, int mode, ...@@ -2168,13 +2160,12 @@ int p9_client_mknod_dotl(struct p9_fid *fid, const char *name, int mode,
trace_9p_protocol_dump(clnt, &req->rc); trace_9p_protocol_dump(clnt, &req->rc);
goto error; goto error;
} }
p9_debug(P9_DEBUG_9P, "<<< RMKNOD qid %x.%llx.%x\n", qid->type, p9_debug(P9_DEBUG_9P, "<<< RMKNOD qid %x.%llx.%x\n",
(unsigned long long)qid->path, qid->version); qid->type, qid->path, qid->version);
error: error:
p9_tag_remove(clnt, req); p9_tag_remove(clnt, req);
return err; return err;
} }
EXPORT_SYMBOL(p9_client_mknod_dotl); EXPORT_SYMBOL(p9_client_mknod_dotl);
...@@ -2189,8 +2180,8 @@ int p9_client_mkdir_dotl(struct p9_fid *fid, const char *name, int mode, ...@@ -2189,8 +2180,8 @@ int p9_client_mkdir_dotl(struct p9_fid *fid, const char *name, int mode,
clnt = fid->clnt; clnt = fid->clnt;
p9_debug(P9_DEBUG_9P, ">>> TMKDIR fid %d name %s mode %d gid %d\n", p9_debug(P9_DEBUG_9P, ">>> TMKDIR fid %d name %s mode %d gid %d\n",
fid->fid, name, mode, from_kgid(&init_user_ns, gid)); fid->fid, name, mode, from_kgid(&init_user_ns, gid));
req = p9_client_rpc(clnt, P9_TMKDIR, "dsdg", fid->fid, name, mode, req = p9_client_rpc(clnt, P9_TMKDIR, "dsdg",
gid); fid->fid, name, mode, gid);
if (IS_ERR(req)) if (IS_ERR(req))
return PTR_ERR(req); return PTR_ERR(req);
...@@ -2200,12 +2191,11 @@ int p9_client_mkdir_dotl(struct p9_fid *fid, const char *name, int mode, ...@@ -2200,12 +2191,11 @@ int p9_client_mkdir_dotl(struct p9_fid *fid, const char *name, int mode,
goto error; goto error;
} }
p9_debug(P9_DEBUG_9P, "<<< RMKDIR qid %x.%llx.%x\n", qid->type, p9_debug(P9_DEBUG_9P, "<<< RMKDIR qid %x.%llx.%x\n", qid->type,
(unsigned long long)qid->path, qid->version); qid->path, qid->version);
error: error:
p9_tag_remove(clnt, req); p9_tag_remove(clnt, req);
return err; return err;
} }
EXPORT_SYMBOL(p9_client_mkdir_dotl); EXPORT_SYMBOL(p9_client_mkdir_dotl);
...@@ -2217,8 +2207,8 @@ int p9_client_lock_dotl(struct p9_fid *fid, struct p9_flock *flock, u8 *status) ...@@ -2217,8 +2207,8 @@ int p9_client_lock_dotl(struct p9_fid *fid, struct p9_flock *flock, u8 *status)
err = 0; err = 0;
clnt = fid->clnt; clnt = fid->clnt;
p9_debug(P9_DEBUG_9P, ">>> TLOCK fid %d type %i flags %d " p9_debug(P9_DEBUG_9P,
"start %lld length %lld proc_id %d client_id %s\n", ">>> TLOCK fid %d type %i flags %d start %lld length %lld proc_id %d client_id %s\n",
fid->fid, flock->type, flock->flags, flock->start, fid->fid, flock->type, flock->flags, flock->start,
flock->length, flock->proc_id, flock->client_id); flock->length, flock->proc_id, flock->client_id);
...@@ -2238,7 +2228,6 @@ int p9_client_lock_dotl(struct p9_fid *fid, struct p9_flock *flock, u8 *status) ...@@ -2238,7 +2228,6 @@ int p9_client_lock_dotl(struct p9_fid *fid, struct p9_flock *flock, u8 *status)
error: error:
p9_tag_remove(clnt, req); p9_tag_remove(clnt, req);
return err; return err;
} }
EXPORT_SYMBOL(p9_client_lock_dotl); EXPORT_SYMBOL(p9_client_lock_dotl);
...@@ -2250,12 +2239,14 @@ int p9_client_getlock_dotl(struct p9_fid *fid, struct p9_getlock *glock) ...@@ -2250,12 +2239,14 @@ int p9_client_getlock_dotl(struct p9_fid *fid, struct p9_getlock *glock)
err = 0; err = 0;
clnt = fid->clnt; clnt = fid->clnt;
p9_debug(P9_DEBUG_9P, ">>> TGETLOCK fid %d, type %i start %lld " p9_debug(P9_DEBUG_9P,
"length %lld proc_id %d client_id %s\n", fid->fid, glock->type, ">>> TGETLOCK fid %d, type %i start %lld length %lld proc_id %d client_id %s\n",
glock->start, glock->length, glock->proc_id, glock->client_id); fid->fid, glock->type, glock->start, glock->length,
glock->proc_id, glock->client_id);
req = p9_client_rpc(clnt, P9_TGETLOCK, "dbqqds", fid->fid, glock->type, req = p9_client_rpc(clnt, P9_TGETLOCK, "dbqqds", fid->fid,
glock->start, glock->length, glock->proc_id, glock->client_id); glock->type, glock->start, glock->length,
glock->proc_id, glock->client_id);
if (IS_ERR(req)) if (IS_ERR(req))
return PTR_ERR(req); return PTR_ERR(req);
...@@ -2267,9 +2258,10 @@ int p9_client_getlock_dotl(struct p9_fid *fid, struct p9_getlock *glock) ...@@ -2267,9 +2258,10 @@ int p9_client_getlock_dotl(struct p9_fid *fid, struct p9_getlock *glock)
trace_9p_protocol_dump(clnt, &req->rc); trace_9p_protocol_dump(clnt, &req->rc);
goto error; goto error;
} }
p9_debug(P9_DEBUG_9P, "<<< RGETLOCK type %i start %lld length %lld " p9_debug(P9_DEBUG_9P,
"proc_id %d client_id %s\n", glock->type, glock->start, "<<< RGETLOCK type %i start %lld length %lld proc_id %d client_id %s\n",
glock->length, glock->proc_id, glock->client_id); glock->type, glock->start, glock->length,
glock->proc_id, glock->client_id);
error: error:
p9_tag_remove(clnt, req); p9_tag_remove(clnt, req);
return err; return err;
......
...@@ -183,7 +183,7 @@ int p9_error_init(void) ...@@ -183,7 +183,7 @@ int p9_error_init(void)
INIT_HLIST_HEAD(&hash_errmap[bucket]); INIT_HLIST_HEAD(&hash_errmap[bucket]);
/* load initial error map into hash table */ /* load initial error map into hash table */
for (c = errmap; c->name != NULL; c++) { for (c = errmap; c->name; c++) {
c->namelen = strlen(c->name); c->namelen = strlen(c->name);
bucket = jhash(c->name, c->namelen, 0) % ERRHASHSZ; bucket = jhash(c->name, c->namelen, 0) % ERRHASHSZ;
INIT_HLIST_NODE(&c->list); INIT_HLIST_NODE(&c->list);
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#ifdef CONFIG_NET_9P_DEBUG #ifdef CONFIG_NET_9P_DEBUG
unsigned int p9_debug_level = 0; /* feature-rific global debug level */ unsigned int p9_debug_level; /* feature-rific global debug level */
EXPORT_SYMBOL(p9_debug_level); EXPORT_SYMBOL(p9_debug_level);
module_param_named(debug, p9_debug_level, uint, 0); module_param_named(debug, p9_debug_level, uint, 0);
MODULE_PARM_DESC(debug, "9P debugging level"); MODULE_PARM_DESC(debug, "9P debugging level");
...@@ -52,10 +52,7 @@ void _p9_debug(enum p9_debug_flags level, const char *func, ...@@ -52,10 +52,7 @@ void _p9_debug(enum p9_debug_flags level, const char *func,
EXPORT_SYMBOL(_p9_debug); EXPORT_SYMBOL(_p9_debug);
#endif #endif
/* /* Dynamic Transport Registration Routines */
* Dynamic Transport Registration Routines
*
*/
static DEFINE_SPINLOCK(v9fs_trans_lock); static DEFINE_SPINLOCK(v9fs_trans_lock);
static LIST_HEAD(v9fs_trans_list); static LIST_HEAD(v9fs_trans_list);
......
...@@ -44,6 +44,7 @@ EXPORT_SYMBOL(p9stat_free); ...@@ -44,6 +44,7 @@ EXPORT_SYMBOL(p9stat_free);
size_t pdu_read(struct p9_fcall *pdu, void *data, size_t size) size_t pdu_read(struct p9_fcall *pdu, void *data, size_t size)
{ {
size_t len = min(pdu->size - pdu->offset, size); size_t len = min(pdu->size - pdu->offset, size);
memcpy(data, &pdu->sdata[pdu->offset], len); memcpy(data, &pdu->sdata[pdu->offset], len);
pdu->offset += len; pdu->offset += len;
return size - len; return size - len;
...@@ -52,6 +53,7 @@ size_t pdu_read(struct p9_fcall *pdu, void *data, size_t size) ...@@ -52,6 +53,7 @@ size_t pdu_read(struct p9_fcall *pdu, void *data, size_t size)
static size_t pdu_write(struct p9_fcall *pdu, const void *data, size_t size) static size_t pdu_write(struct p9_fcall *pdu, const void *data, size_t size)
{ {
size_t len = min(pdu->capacity - pdu->size, size); size_t len = min(pdu->capacity - pdu->size, size);
memcpy(&pdu->sdata[pdu->size], data, len); memcpy(&pdu->sdata[pdu->size], data, len);
pdu->size += len; pdu->size += len;
return size - len; return size - len;
...@@ -62,6 +64,7 @@ pdu_write_u(struct p9_fcall *pdu, struct iov_iter *from, size_t size) ...@@ -62,6 +64,7 @@ pdu_write_u(struct p9_fcall *pdu, struct iov_iter *from, size_t size)
{ {
size_t len = min(pdu->capacity - pdu->size, size); size_t len = min(pdu->capacity - pdu->size, size);
struct iov_iter i = *from; struct iov_iter i = *from;
if (!copy_from_iter_full(&pdu->sdata[pdu->size], len, &i)) if (!copy_from_iter_full(&pdu->sdata[pdu->size], len, &i))
len = 0; len = 0;
...@@ -69,22 +72,21 @@ pdu_write_u(struct p9_fcall *pdu, struct iov_iter *from, size_t size) ...@@ -69,22 +72,21 @@ pdu_write_u(struct p9_fcall *pdu, struct iov_iter *from, size_t size)
return size - len; return size - len;
} }
/* /* b - int8_t
b - int8_t * w - int16_t
w - int16_t * d - int32_t
d - int32_t * q - int64_t
q - int64_t * s - string
s - string * u - numeric uid
u - numeric uid * g - numeric gid
g - numeric gid * S - stat
S - stat * Q - qid
Q - qid * D - data blob (int32_t size followed by void *, results are not freed)
D - data blob (int32_t size followed by void *, results are not freed) * T - array of strings (int16_t count, followed by strings)
T - array of strings (int16_t count, followed by strings) * R - array of qids (int16_t count, followed by qids)
R - array of qids (int16_t count, followed by qids) * A - stat for 9p2000.L (p9_stat_dotl)
A - stat for 9p2000.L (p9_stat_dotl) * ? - if optional = 1, continue parsing
? - if optional = 1, continue parsing */
*/
static int static int
p9pdu_vreadf(struct p9_fcall *pdu, int proto_version, const char *fmt, p9pdu_vreadf(struct p9_fcall *pdu, int proto_version, const char *fmt,
......
...@@ -4,4 +4,4 @@ ...@@ -4,4 +4,4 @@
* Author Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com> * Author Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
*/ */
void p9_release_pages(struct page **, int); void p9_release_pages(struct page **pages, int nr_pages);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment