NFSv4: Fix up the documentation for nfs_do_refmount
[safe/jmp/linux-2.6] / fs / ceph / xattr.c
index 65b3a84..2845422 100644 (file)
@@ -3,6 +3,7 @@
 #include "decode.h"
 
 #include <linux/xattr.h>
+#include <linux/slab.h>
 
 static bool ceph_is_valid_xattr(const char *name)
 {
@@ -350,7 +351,7 @@ static int __build_xattrs(struct inode *inode)
        struct ceph_inode_info *ci = ceph_inode(inode);
        int xattr_version;
        struct ceph_inode_xattr **xattrs = NULL;
-       int err;
+       int err = 0;
        int i;
 
        dout("__build_xattrs() len=%d\n",
@@ -482,7 +483,8 @@ void __ceph_build_xattrs_blob(struct ceph_inode_info *ci)
                ci->i_xattrs.prealloc_blob->vec.iov_len =
                        dest - ci->i_xattrs.prealloc_blob->vec.iov_base;
 
-               ceph_buffer_put(ci->i_xattrs.blob);
+               if (ci->i_xattrs.blob)
+                       ceph_buffer_put(ci->i_xattrs.blob);
                ci->i_xattrs.blob = ci->i_xattrs.prealloc_blob;
                ci->i_xattrs.prealloc_blob = NULL;
                ci->i_xattrs.dirty = false;
@@ -655,8 +657,10 @@ static int ceph_sync_setxattr(struct dentry *dentry, const char *name,
        /* do request */
        req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_SETXATTR,
                                       USE_AUTH_MDS);
-       if (IS_ERR(req))
-               return PTR_ERR(req);
+       if (IS_ERR(req)) {
+               err = PTR_ERR(req);
+               goto out;
+       }
        req->r_inode = igrab(inode);
        req->r_inode_drop = CEPH_CAP_XATTR_SHARED;
        req->r_num_caps = 1;
@@ -743,11 +747,12 @@ retry:
 
                spin_unlock(&inode->i_lock);
                dout(" preaallocating new blob size=%d\n", required_blob_size);
-               blob = ceph_buffer_new_alloc(required_blob_size, GFP_NOFS);
+               blob = ceph_buffer_new(required_blob_size, GFP_NOFS);
                if (!blob)
                        goto out;
                spin_lock(&inode->i_lock);
-               ceph_buffer_put(ci->i_xattrs.prealloc_blob);
+               if (ci->i_xattrs.prealloc_blob)
+                       ceph_buffer_put(ci->i_xattrs.prealloc_blob);
                ci->i_xattrs.prealloc_blob = blob;
                goto retry;
        }