Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 93d0ec85 authored by Jeff Layton's avatar Jeff Layton Committed by Steve French
Browse files

remove locking around tcpSesAllocCount atomic variable



The global tcpSesAllocCount variable is an atomic already and doesn't
really need the extra locking around it. Remove the locking and just use
the atomic_inc_return and atomic_dec_return functions to make sure we
access it correctly.

Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
parent 66b8bd3c
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -351,10 +351,8 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)

	current->flags |= PF_MEMALLOC;
	cFYI(1, ("Demultiplex PID: %d", task_pid_nr(current)));
	write_lock(&GlobalSMBSeslock);
	atomic_inc(&tcpSesAllocCount);
	length = tcpSesAllocCount.counter;
	write_unlock(&GlobalSMBSeslock);

	length = atomic_inc_return(&tcpSesAllocCount);
	if (length > 1)
		mempool_resize(cifs_req_poolp, length + cifs_min_rcv,
				GFP_KERNEL);
@@ -745,14 +743,11 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)
		coming home not much else we can do but free the memory */
	}

	write_lock(&GlobalSMBSeslock);
	atomic_dec(&tcpSesAllocCount);
	length = tcpSesAllocCount.counter;

	/* last chance to mark ses pointers invalid
	if there are any pointing to this (e.g
	if a crazy root user tried to kill cifsd
	kernel thread explicitly this might happen) */
	write_lock(&GlobalSMBSeslock);
	list_for_each(tmp, &GlobalSMBSessionList) {
		ses = list_entry(tmp, struct cifsSesInfo,
				cifsSessionList);
@@ -763,6 +758,8 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)

	kfree(server->hostname);
	kfree(server);

	length = atomic_dec_return(&tcpSesAllocCount);
	if (length  > 0)
		mempool_resize(cifs_req_poolp, length + cifs_min_rcv,
				GFP_KERNEL);