lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:	Wed, 21 Mar 2012 12:23:27 +1100
From:	Stephen Rothwell <sfr@...b.auug.org.au>
To:	Sage Weil <sage@...dream.net>
Cc:	linux-next@...r.kernel.org, linux-kernel@...r.kernel.org,
	Alex Elder <elder@...amhost.com>
Subject: linux-next: manual merge of the ceph tree with Linus' tree

Hi Sage,

Today's linux-next merge of the ceph tree got a conflict in
fs/ceph/xattr.c between commit 83eb26af0db7 ("ceph: ensure prealloc_blob
is in place when removing xattr") from Linus' tree and commit
15226d16c19c ("ceph: make ceph_setxattr() and ceph_removexattr() more
alike") from the ceph tree.

I used the resolution provided by Alex (thanks) (see below) and I can
carry the fix as necessary.
-- 
Cheers,
Stephen Rothwell                    sfr@...b.auug.org.au

diff --cc fs/ceph/xattr.c
index a76f697,a3c1f9b..0000000
--- a/fs/ceph/xattr.c
+++ b/fs/ceph/xattr.c
@@@ -816,11 -883,10 +883,11 @@@ static int ceph_send_removexattr(struc
  int ceph_removexattr(struct dentry *dentry, const char *name)
  {
  	struct inode *inode = dentry->d_inode;
+ 	struct ceph_vxattr *vxattr;
  	struct ceph_inode_info *ci = ceph_inode(inode);
- 	struct ceph_vxattr_cb *vxattrs = ceph_inode_vxattrs(inode);
  	int issued;
  	int err;
 +	int required_blob_size;
  	int dirty;
  
  	if (ceph_snap(inode) != CEPH_NOSNAP)
@@@ -829,42 -895,19 +896,39 @@@
  	if (!ceph_is_valid_xattr(name))
  		return -EOPNOTSUPP;
  
- 	if (vxattrs) {
- 		struct ceph_vxattr_cb *vxattr =
- 			ceph_match_vxattr(vxattrs, name);
- 		if (vxattr && vxattr->readonly)
- 			return -EOPNOTSUPP;
- 	}
+ 	vxattr = ceph_match_vxattr(inode, name);
+ 	if (vxattr && vxattr->readonly)
+ 		return -EOPNOTSUPP;
  
 +	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);
 +
 +	if (!ci->i_xattrs.prealloc_blob ||
 +	    required_blob_size > ci->i_xattrs.prealloc_blob->alloc_len) {
 +		struct ceph_buffer *blob;
 +
 +		spin_unlock(&ci->i_ceph_lock);
 +		dout(" preaallocating new blob size=%d\n", required_blob_size);
 +		blob = ceph_buffer_new(required_blob_size, GFP_NOFS);
 +		if (!blob)
 +			goto out;
 +		spin_lock(&ci->i_ceph_lock);
 +		if (ci->i_xattrs.prealloc_blob)
 +			ceph_buffer_put(ci->i_xattrs.prealloc_blob);
 +		ci->i_xattrs.prealloc_blob = blob;
 +		goto 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;

Content of type "application/pgp-signature" skipped

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ