Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 201788
b: refs/heads/master
c: 87d7845
h: refs/heads/master
v: v3
  • Loading branch information
Sripathi Kodi authored and Eric Van Hensbergen committed Aug 2, 2010
1 parent e95378d commit 1bb17ff
Show file tree
Hide file tree
Showing 6 changed files with 123 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f085312204f384a0277a66c3c48ba8f9edcd58f2
refs/heads/master: 87d7845aa0b157a62448dd3e339856f28befe1f4
49 changes: 46 additions & 3 deletions trunk/fs/9p/vfs_inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -976,6 +976,49 @@ static int v9fs_vfs_setattr(struct dentry *dentry, struct iattr *iattr)
return retval;
}

/**
* v9fs_vfs_setattr_dotl - set file metadata
* @dentry: file whose metadata to set
* @iattr: metadata assignment structure
*
*/

static int v9fs_vfs_setattr_dotl(struct dentry *dentry, struct iattr *iattr)
{
int retval;
struct v9fs_session_info *v9ses;
struct p9_fid *fid;
struct p9_iattr_dotl p9attr;

P9_DPRINTK(P9_DEBUG_VFS, "\n");

retval = inode_change_ok(dentry->d_inode, iattr);
if (retval)
return retval;

p9attr.valid = iattr->ia_valid;
p9attr.mode = iattr->ia_mode;
p9attr.uid = iattr->ia_uid;
p9attr.gid = iattr->ia_gid;
p9attr.size = iattr->ia_size;
p9attr.atime_sec = iattr->ia_atime.tv_sec;
p9attr.atime_nsec = iattr->ia_atime.tv_nsec;
p9attr.mtime_sec = iattr->ia_mtime.tv_sec;
p9attr.mtime_nsec = iattr->ia_mtime.tv_nsec;

retval = -EPERM;
v9ses = v9fs_inode2v9ses(dentry->d_inode);
fid = v9fs_fid_lookup(dentry);
if (IS_ERR(fid))
return PTR_ERR(fid);

retval = p9_client_setattr(fid, &p9attr);
if (retval >= 0)
retval = inode_setattr(dentry->d_inode, iattr);

return retval;
}

/**
* v9fs_stat2inode - populate an inode structure with mistat info
* @stat: Plan 9 metadata (mistat) structure
Expand Down Expand Up @@ -1400,7 +1443,7 @@ static const struct inode_operations v9fs_dir_inode_operations_dotl = {
.mknod = v9fs_vfs_mknod,
.rename = v9fs_vfs_rename,
.getattr = v9fs_vfs_getattr_dotl,
.setattr = v9fs_vfs_setattr,
.setattr = v9fs_vfs_setattr_dotl,
};

static const struct inode_operations v9fs_dir_inode_operations = {
Expand All @@ -1422,7 +1465,7 @@ static const struct inode_operations v9fs_file_inode_operations = {

static const struct inode_operations v9fs_file_inode_operations_dotl = {
.getattr = v9fs_vfs_getattr_dotl,
.setattr = v9fs_vfs_setattr,
.setattr = v9fs_vfs_setattr_dotl,
};

static const struct inode_operations v9fs_symlink_inode_operations = {
Expand All @@ -1438,5 +1481,5 @@ static const struct inode_operations v9fs_symlink_inode_operations_dotl = {
.follow_link = v9fs_vfs_follow_link,
.put_link = v9fs_vfs_put_link,
.getattr = v9fs_vfs_getattr_dotl,
.setattr = v9fs_vfs_setattr,
.setattr = v9fs_vfs_setattr_dotl,
};
28 changes: 28 additions & 0 deletions trunk/include/net/9p/9p.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,8 @@ enum p9_msg_t {
P9_RRENAME,
P9_TGETATTR = 24,
P9_RGETATTR,
P9_TSETATTR = 26,
P9_RSETATTR,
P9_TREADDIR = 40,
P9_RREADDIR,
P9_TVERSION = 100,
Expand Down Expand Up @@ -406,6 +408,32 @@ struct p9_stat_dotl {
#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;
Expand Down
1 change: 1 addition & 0 deletions trunk/include/net/9p/client.h
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ 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);
Expand Down
30 changes: 30 additions & 0 deletions trunk/net/9p/client.c
Original file line number Diff line number Diff line change
Expand Up @@ -1426,6 +1426,36 @@ int p9_client_wstat(struct p9_fid *fid, struct p9_wstat *wst)
}
EXPORT_SYMBOL(p9_client_wstat);

int p9_client_setattr(struct p9_fid *fid, struct p9_iattr_dotl *p9attr)
{
int err;
struct p9_req_t *req;
struct p9_client *clnt;

err = 0;
clnt = fid->clnt;
P9_DPRINTK(P9_DEBUG_9P, ">>> TSETATTR fid %d\n", fid->fid);
P9_DPRINTK(P9_DEBUG_9P,
" 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->uid, p9attr->gid,
p9attr->size, p9attr->atime_sec, p9attr->atime_nsec,
p9attr->mtime_sec, p9attr->mtime_nsec);

req = p9_client_rpc(clnt, P9_TSETATTR, "dI", fid->fid, p9attr);

if (IS_ERR(req)) {
err = PTR_ERR(req);
goto error;
}
P9_DPRINTK(P9_DEBUG_9P, "<<< RSETATTR fid %d\n", fid->fid);
p9_free_req(clnt, req);
error:
return err;
}
EXPORT_SYMBOL(p9_client_setattr);

int p9_client_statfs(struct p9_fid *fid, struct p9_rstatfs *sb)
{
int err;
Expand Down
17 changes: 17 additions & 0 deletions trunk/net/9p/protocol.c
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,23 @@ p9pdu_vwritef(struct p9_fcall *pdu, int proto_version, const char *fmt,
}
}
break;
case 'I':{
struct p9_iattr_dotl *p9attr = va_arg(ap,
struct p9_iattr_dotl *);

errcode = p9pdu_writef(pdu, proto_version,
"ddddqqqqq",
p9attr->valid,
p9attr->mode,
p9attr->uid,
p9attr->gid,
p9attr->size,
p9attr->atime_sec,
p9attr->atime_nsec,
p9attr->mtime_sec,
p9attr->mtime_nsec);
}
break;
case '?':
if ((proto_version != p9_proto_2000u) &&
(proto_version != p9_proto_2000L))
Expand Down

0 comments on commit 1bb17ff

Please sign in to comment.