Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 359173
b: refs/heads/master
c: 38baba9
h: refs/heads/master
i:
  359171: 312d55a
v: v3
  • Loading branch information
Al Viro committed Feb 26, 2013
1 parent 48ba9a5 commit ec0c52b
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 16 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: 8add862fad426469a04c879bf5bb01f666a3c58e
refs/heads/master: 38baba9ea02780c2df35c7a02552fddeb8576e16
33 changes: 18 additions & 15 deletions trunk/fs/9p/xattr.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,28 +110,36 @@ ssize_t v9fs_xattr_get(struct dentry *dentry, const char *name,
*/
int v9fs_xattr_set(struct dentry *dentry, const char *name,
const void *value, size_t value_len, int flags)
{
struct p9_fid *fid = v9fs_fid_lookup(dentry);
if (IS_ERR(fid))
return PTR_ERR(fid);
return v9fs_fid_xattr_set(fid, name, value, value_len, flags);
}

int v9fs_fid_xattr_set(struct p9_fid *fid, const char *name,
const void *value, size_t value_len, int flags)
{
u64 offset = 0;
int retval, msize, write_count;
struct p9_fid *fid = NULL;

p9_debug(P9_DEBUG_VFS, "name = %s value_len = %zu flags = %d\n",
name, value_len, flags);

fid = v9fs_fid_clone(dentry);
if (IS_ERR(fid)) {
retval = PTR_ERR(fid);
fid = NULL;
goto error;
}
/* Clone it */
fid = p9_client_walk(fid, 0, NULL, 1);
if (IS_ERR(fid))
return PTR_ERR(fid);

/*
* On success fid points to xattr
*/
retval = p9_client_xattrcreate(fid, name, value_len, flags);
if (retval < 0) {
p9_debug(P9_DEBUG_VFS, "p9_client_xattrcreate failed %d\n",
retval);
goto error;
p9_client_clunk(fid);
return retval;
}
msize = fid->clnt->msize;
while (value_len) {
Expand All @@ -144,17 +152,12 @@ int v9fs_xattr_set(struct dentry *dentry, const char *name,
if (write_count < 0) {
/* error in xattr write */
retval = write_count;
goto error;
break;
}
offset += write_count;
value_len -= write_count;
}
/* Total read xattr bytes */
retval = offset;
error:
if (fid)
retval = p9_client_clunk(fid);
return retval;
return p9_client_clunk(fid);
}

ssize_t v9fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size)
Expand Down
2 changes: 2 additions & 0 deletions trunk/fs/9p/xattr.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ extern ssize_t v9fs_fid_xattr_get(struct p9_fid *, const char *,
void *, size_t);
extern ssize_t v9fs_xattr_get(struct dentry *, const char *,
void *, size_t);
extern int v9fs_fid_xattr_set(struct p9_fid *, const char *,
const void *, size_t, int);
extern int v9fs_xattr_set(struct dentry *, const char *,
const void *, size_t, int);
extern ssize_t v9fs_listxattr(struct dentry *, char *, size_t);
Expand Down

0 comments on commit ec0c52b

Please sign in to comment.