Commit e8c3fa9f authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull AFS fixes from David Howells:

 - Fix a cell record leak due to the default error not being cleared.

 - Fix an oops in tracepoint due to a pointer that may contain an error.

 - Fix the ACL storage op for YFS where the wrong op definition is being
   used. By luck, this only actually affects the information appearing
   in traces.

* tag 'afs-fixes-20190822' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs:
  afs: use correct afs_call_type in yfs_fs_store_opaque_acl2
  afs: Fix possible oops in afs_lookup trace event
  afs: Fix leak in afs_lookup_cell_rcu()
parents bb7ba806 7533be85
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -74,6 +74,7 @@ struct afs_cell *afs_lookup_cell_rcu(struct afs_net *net,
			cell = rcu_dereference_raw(net->ws_cell);
			if (cell) {
				afs_get_cell(cell);
				ret = 0;
				break;
			}
			ret = -EDESTADDRREQ;
@@ -108,6 +109,9 @@ struct afs_cell *afs_lookup_cell_rcu(struct afs_net *net,

	done_seqretry(&net->cells_lock, seq);

	if (ret != 0 && cell)
		afs_put_cell(net, cell);

	return ret == 0 ? cell : ERR_PTR(ret);
}

+2 −1
Original line number Diff line number Diff line
@@ -959,7 +959,8 @@ static struct dentry *afs_lookup(struct inode *dir, struct dentry *dentry,
				 inode ? AFS_FS_I(inode) : NULL);
	} else {
		trace_afs_lookup(dvnode, &dentry->d_name,
				 inode ? AFS_FS_I(inode) : NULL);
				 IS_ERR_OR_NULL(inode) ? NULL
				 : AFS_FS_I(inode));
	}
	return d;
}
+1 −1
Original line number Diff line number Diff line
@@ -2171,7 +2171,7 @@ int yfs_fs_store_opaque_acl2(struct afs_fs_cursor *fc, const struct afs_acl *acl
	       key_serial(fc->key), vnode->fid.vid, vnode->fid.vnode);

	size = round_up(acl->size, 4);
	call = afs_alloc_flat_call(net, &yfs_RXYFSStoreStatus,
	call = afs_alloc_flat_call(net, &yfs_RXYFSStoreOpaqueACL2,
				   sizeof(__be32) * 2 +
				   sizeof(struct yfs_xdr_YFSFid) +
				   sizeof(__be32) + size,