xfs: convert log grant ticket queues to list heads
The grant write and reserve queues use a roll-your-own double linked list, so convert it to a standard list_head structure and convert all the list traversals to use list_for_each_entry(). We can also get rid of the XLOG_TIC_IN_Q flag as we can use the list_empty() check to tell if the ticket is in a list or not. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
这个提交包含在:
@@ -132,12 +132,10 @@ static inline uint xlog_get_client_id(__be32 i)
|
||||
*/
|
||||
#define XLOG_TIC_INITED 0x1 /* has been initialized */
|
||||
#define XLOG_TIC_PERM_RESERV 0x2 /* permanent reservation */
|
||||
#define XLOG_TIC_IN_Q 0x4
|
||||
|
||||
#define XLOG_TIC_FLAGS \
|
||||
{ XLOG_TIC_INITED, "XLOG_TIC_INITED" }, \
|
||||
{ XLOG_TIC_PERM_RESERV, "XLOG_TIC_PERM_RESERV" }, \
|
||||
{ XLOG_TIC_IN_Q, "XLOG_TIC_IN_Q" }
|
||||
{ XLOG_TIC_PERM_RESERV, "XLOG_TIC_PERM_RESERV" }
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
@@ -244,8 +242,7 @@ typedef struct xlog_res {
|
||||
|
||||
typedef struct xlog_ticket {
|
||||
sv_t t_wait; /* ticket wait queue : 20 */
|
||||
struct xlog_ticket *t_next; /* :4|8 */
|
||||
struct xlog_ticket *t_prev; /* :4|8 */
|
||||
struct list_head t_queue; /* reserve/write queue */
|
||||
xlog_tid_t t_tid; /* transaction identifier : 4 */
|
||||
atomic_t t_ref; /* ticket reference count : 4 */
|
||||
int t_curr_res; /* current reservation in bytes : 4 */
|
||||
@@ -519,8 +516,8 @@ typedef struct log {
|
||||
|
||||
/* The following block of fields are changed while holding grant_lock */
|
||||
spinlock_t l_grant_lock ____cacheline_aligned_in_smp;
|
||||
xlog_ticket_t *l_reserve_headq;
|
||||
xlog_ticket_t *l_write_headq;
|
||||
struct list_head l_reserveq;
|
||||
struct list_head l_writeq;
|
||||
int l_grant_reserve_cycle;
|
||||
int l_grant_reserve_bytes;
|
||||
int l_grant_write_cycle;
|
||||
|
在新工单中引用
屏蔽一个用户