Commit d40012a8 authored by Namjae Jeon's avatar Namjae Jeon Committed by Steve French
Browse files

cifsd: declare ida statically



Matthew pointed out that embedding struct ida into the struct is
better than having a pointer to it.
This patch initialise it statically using DEFINE_IDA() or ida_init()
and remove ksmbd_ida_alloc/free().

Signed-off-by: default avatarNamjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 1920bb1f
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -38,7 +38,6 @@ void ksmbd_conn_free(struct ksmbd_conn *conn)
	write_unlock(&conn_list_lock);

	kvfree(conn->request_buf);
	ksmbd_ida_free(conn->async_ida);
	kfree(conn->preauth_info);
	kfree(conn);
}
@@ -70,7 +69,7 @@ struct ksmbd_conn *ksmbd_conn_alloc(void)
	INIT_LIST_HEAD(&conn->async_requests);
	spin_lock_init(&conn->request_lock);
	spin_lock_init(&conn->credits_lock);
	conn->async_ida = ksmbd_ida_alloc();
	ida_init(&conn->async_ida);

	write_lock(&conn_list_lock);
	list_add(&conn->conns_list, &conn_list);
+1 −1
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ struct ksmbd_conn {
	struct sockaddr_storage		peer_addr;

	/* Identifier for async message */
	struct ksmbd_ida		*async_ida;
	struct ida			async_ida;

	__le16				cipher_type;
	__le16				compress_algorithm;
+1 −1
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ void ksmbd_free_work_struct(struct ksmbd_work *work)
	kfree(work->tr_buf);
	kvfree(work->request_buf);
	if (work->async_id)
		ksmbd_release_id(work->conn->async_ida, work->async_id);
		ksmbd_release_id(&work->conn->async_ida, work->async_id);
	kmem_cache_free(work_cache, work);
}

+12 −33
Original line number Diff line number Diff line
@@ -5,65 +5,44 @@

#include "ksmbd_ida.h"

struct ksmbd_ida *ksmbd_ida_alloc(void)
static inline int __acquire_id(struct ida *ida, int from, int to)
{
	struct ksmbd_ida *ida;

	ida = kmalloc(sizeof(struct ksmbd_ida), GFP_KERNEL);
	if (!ida)
		return NULL;

	ida_init(&ida->map);
	return ida;
}

void ksmbd_ida_free(struct ksmbd_ida *ida)
{
	if (!ida)
		return;

	ida_destroy(&ida->map);
	kfree(ida);
	return ida_simple_get(ida, from, to, GFP_KERNEL);
}

static inline int __acquire_id(struct ksmbd_ida *ida, int from, int to)
{
	return ida_simple_get(&ida->map, from, to, GFP_KERNEL);
}

int ksmbd_acquire_smb2_tid(struct ksmbd_ida *ida)
int ksmbd_acquire_smb2_tid(struct ida *ida)
{
	int id;

	do {
	id = __acquire_id(ida, 0, 0);
	} while (id == 0xFFFF);
	if (id == 0xFFFF)
		id = __acquire_id(ida, 0, 0);

	return id;
}

int ksmbd_acquire_smb2_uid(struct ksmbd_ida *ida)
int ksmbd_acquire_smb2_uid(struct ida *ida)
{
	int id;

	do {
	id = __acquire_id(ida, 1, 0);
	} while (id == 0xFFFE);
	if (id == 0xFFFE)
		id = __acquire_id(ida, 1, 0);

	return id;
}

int ksmbd_acquire_async_msg_id(struct ksmbd_ida *ida)
int ksmbd_acquire_async_msg_id(struct ida *ida)
{
	return __acquire_id(ida, 1, 0);
}

int ksmbd_acquire_id(struct ksmbd_ida *ida)
int ksmbd_acquire_id(struct ida *ida)
{
	return __acquire_id(ida, 0, 0);
}

void ksmbd_release_id(struct ksmbd_ida *ida, int id)
void ksmbd_release_id(struct ida *ida, int id)
{
	ida_simple_remove(&ida->map, id);
	ida_simple_remove(ida, id);
}
+5 −12
Original line number Diff line number Diff line
@@ -9,13 +9,6 @@
#include <linux/slab.h>
#include <linux/idr.h>

struct ksmbd_ida {
	struct ida	map;
};

struct ksmbd_ida *ksmbd_ida_alloc(void);
void ksmbd_ida_free(struct ksmbd_ida *ida);

/*
 * 2.2.1.6.7 TID Generation
 *    The value 0xFFFF MUST NOT be used as a valid TID. All other
@@ -23,7 +16,7 @@ void ksmbd_ida_free(struct ksmbd_ida *ida);
 *    The value 0xFFFF is used to specify all TIDs or no TID,
 *    depending upon the context in which it is used.
 */
int ksmbd_acquire_smb2_tid(struct ksmbd_ida *ida);
int ksmbd_acquire_smb2_tid(struct ida *ida);

/*
 * 2.2.1.6.8 UID Generation
@@ -32,10 +25,10 @@ int ksmbd_acquire_smb2_tid(struct ksmbd_ida *ida);
 *    valid UID.<21> All other possible values for a UID, excluding
 *    zero (0x0000), are valid.
 */
int ksmbd_acquire_smb2_uid(struct ksmbd_ida *ida);
int ksmbd_acquire_async_msg_id(struct ksmbd_ida *ida);
int ksmbd_acquire_smb2_uid(struct ida *ida);
int ksmbd_acquire_async_msg_id(struct ida *ida);

int ksmbd_acquire_id(struct ksmbd_ida *ida);
int ksmbd_acquire_id(struct ida *ida);

void ksmbd_release_id(struct ksmbd_ida *ida, int id);
void ksmbd_release_id(struct ida *ida, int id);
#endif /* __KSMBD_IDA_MANAGEMENT_H__ */
Loading