Commit e2080b70 authored by Markus Elfring's avatar Markus Elfring Committed by Steve French
Browse files

smb: client: Improve unlocking of a mutex in cifs_get_swn_reg()



Use two additional labels so that another bit of common code can be better
reused at the end of this function implementation.

Signed-off-by: default avatarMarkus Elfring <elfring@users.sourceforge.net>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 0a98b40b
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -313,17 +313,15 @@ static struct cifs_swn_reg *cifs_get_swn_reg(struct cifs_tcon *tcon)
	reg = cifs_find_swn_reg(tcon);
	if (!IS_ERR(reg)) {
		kref_get(&reg->ref_count);
		mutex_unlock(&cifs_swnreg_idr_mutex);
		return reg;
		goto unlock;
	} else if (PTR_ERR(reg) != -EEXIST) {
		mutex_unlock(&cifs_swnreg_idr_mutex);
		return reg;
		goto unlock;
	}

	reg = kmalloc(sizeof(struct cifs_swn_reg), GFP_ATOMIC);
	if (reg == NULL) {
		mutex_unlock(&cifs_swnreg_idr_mutex);
		return ERR_PTR(-ENOMEM);
		ret = -ENOMEM;
		goto fail_unlock;
	}

	kref_init(&reg->ref_count);
@@ -354,7 +352,7 @@ static struct cifs_swn_reg *cifs_get_swn_reg(struct cifs_tcon *tcon)
	reg->ip_notify = (tcon->capabilities & SMB2_SHARE_CAP_SCALEOUT);

	reg->tcon = tcon;

unlock:
	mutex_unlock(&cifs_swnreg_idr_mutex);

	return reg;
@@ -365,6 +363,7 @@ static struct cifs_swn_reg *cifs_get_swn_reg(struct cifs_tcon *tcon)
	idr_remove(&cifs_swnreg_idr, reg->id);
fail:
	kfree(reg);
fail_unlock:
	mutex_unlock(&cifs_swnreg_idr_mutex);
	return ERR_PTR(ret);
}