xfs: add the xlog_grant_head structure
Add a new data structure to allow sharing code between the log grant and regrant code. Reviewed-by: Mark Tinguely <tinguely@sgi.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Ben Myers <bpm@sgi.com>
此提交包含在:
@@ -469,6 +469,16 @@ struct xfs_cil {
|
||||
#define XLOG_CIL_SPACE_LIMIT(log) (log->l_logsize >> 3)
|
||||
#define XLOG_CIL_HARD_SPACE_LIMIT(log) (3 * (log->l_logsize >> 4))
|
||||
|
||||
/*
|
||||
* ticket grant locks, queues and accounting have their own cachlines
|
||||
* as these are quite hot and can be operated on concurrently.
|
||||
*/
|
||||
struct xlog_grant_head {
|
||||
spinlock_t lock ____cacheline_aligned_in_smp;
|
||||
struct list_head waiters;
|
||||
atomic64_t grant;
|
||||
};
|
||||
|
||||
/*
|
||||
* The reservation head lsn is not made up of a cycle number and block number.
|
||||
* Instead, it uses a cycle number and byte number. Logs don't expect to
|
||||
@@ -520,17 +530,8 @@ typedef struct log {
|
||||
/* lsn of 1st LR with unflushed * buffers */
|
||||
atomic64_t l_tail_lsn ____cacheline_aligned_in_smp;
|
||||
|
||||
/*
|
||||
* ticket grant locks, queues and accounting have their own cachlines
|
||||
* as these are quite hot and can be operated on concurrently.
|
||||
*/
|
||||
spinlock_t l_grant_reserve_lock ____cacheline_aligned_in_smp;
|
||||
struct list_head l_reserveq;
|
||||
atomic64_t l_grant_reserve_head;
|
||||
|
||||
spinlock_t l_grant_write_lock ____cacheline_aligned_in_smp;
|
||||
struct list_head l_writeq;
|
||||
atomic64_t l_grant_write_head;
|
||||
struct xlog_grant_head l_reserve_head;
|
||||
struct xlog_grant_head l_write_head;
|
||||
|
||||
/* The following field are used for debugging; need to hold icloglock */
|
||||
#ifdef DEBUG
|
||||
|
新增問題並參考
封鎖使用者