@ -765,15 +765,15 @@ int ceph_setxattr(struct dentry *dentry, const char *name,
struct inode * inode = dentry - > d_inode ;
struct ceph_vxattr * vxattr ;
struct ceph_inode_info * ci = ceph_inode ( inode ) ;
int issued ;
int err ;
int dirty ;
int name_len = strlen ( name ) ;
int val_len = size ;
char * newname = NULL ;
char * newval = NULL ;
struct ceph_inode_xattr * xattr = NULL ;
int issued ;
int required_blob_size ;
int dirty ;
if ( ceph_snap ( inode ) ! = CEPH_NOSNAP )
return - EROFS ;
@ -804,6 +804,7 @@ int ceph_setxattr(struct dentry *dentry, const char *name,
spin_lock ( & ci - > i_ceph_lock ) ;
retry :
issued = __ceph_caps_issued ( ci , NULL ) ;
dout ( " setxattr %p issued %s \n " , inode , ceph_cap_string ( issued ) ) ;
if ( ! ( issued & CEPH_CAP_XATTR_EXCL ) )
goto do_sync ;
__build_xattrs ( inode ) ;
@ -812,7 +813,7 @@ retry:
if ( ! ci - > i_xattrs . prealloc_blob | |
required_blob_size > ci - > i_xattrs . prealloc_blob - > alloc_len ) {
struct ceph_buffer * blob = NULL ;
struct ceph_buffer * blob ;
spin_unlock ( & ci - > i_ceph_lock ) ;
dout ( " preaallocating new blob size=%d \n " , required_blob_size ) ;
@ -826,12 +827,13 @@ retry:
goto retry ;
}
dout ( " setxattr %p issued %s \n " , inode , ceph_cap_string ( issued ) ) ;
err = __set_xattr ( ci , newname , name_len , newval ,
val_len , 1 , 1 , 1 , & xattr ) ;
dirty = __ceph_mark_dirty_caps ( ci , CEPH_CAP_XATTR_EXCL ) ;
ci - > i_xattrs . dirty = true ;
inode - > i_ctime = CURRENT_TIME ;
spin_unlock ( & ci - > i_ceph_lock ) ;
if ( dirty )
__mark_inode_dirty ( inode , dirty ) ;
@ -895,13 +897,13 @@ int ceph_removexattr(struct dentry *dentry, const char *name)
err = - ENOMEM ;
spin_lock ( & ci - > i_ceph_lock ) ;
__build_xattrs ( inode ) ;
retry :
issued = __ceph_caps_issued ( ci , NULL ) ;
dout ( " removexattr %p issued %s \n " , inode , ceph_cap_string ( issued ) ) ;
if ( ! ( issued & CEPH_CAP_XATTR_EXCL ) )
goto do_sync ;
__build_xattrs ( inode ) ;
required_blob_size = __get_required_blob_size ( ci , 0 , 0 ) ;
@ -922,10 +924,10 @@ retry:
}
err = __remove_xattr_by_name ( ceph_inode ( inode ) , name ) ;
dirty = __ceph_mark_dirty_caps ( ci , CEPH_CAP_XATTR_EXCL ) ;
ci - > i_xattrs . dirty = true ;
inode - > i_ctime = CURRENT_TIME ;
spin_unlock ( & ci - > i_ceph_lock ) ;
if ( dirty )
__mark_inode_dirty ( inode , dirty ) ;