root/include/linux/blockgroup_lock.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. bgl_lock_init
  2. bgl_lock_ptr

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _LINUX_BLOCKGROUP_LOCK_H
   3 #define _LINUX_BLOCKGROUP_LOCK_H
   4 /*
   5  * Per-blockgroup locking for ext2 and ext3.
   6  *
   7  * Simple hashed spinlocking.
   8  */
   9 
  10 #include <linux/spinlock.h>
  11 #include <linux/cache.h>
  12 
  13 #ifdef CONFIG_SMP
  14 #define NR_BG_LOCKS     (4 << ilog2(NR_CPUS < 32 ? NR_CPUS : 32))
  15 #else
  16 #define NR_BG_LOCKS     1
  17 #endif
  18 
  19 struct bgl_lock {
  20         spinlock_t lock;
  21 } ____cacheline_aligned_in_smp;
  22 
  23 struct blockgroup_lock {
  24         struct bgl_lock locks[NR_BG_LOCKS];
  25 };
  26 
  27 static inline void bgl_lock_init(struct blockgroup_lock *bgl)
  28 {
  29         int i;
  30 
  31         for (i = 0; i < NR_BG_LOCKS; i++)
  32                 spin_lock_init(&bgl->locks[i].lock);
  33 }
  34 
  35 static inline spinlock_t *
  36 bgl_lock_ptr(struct blockgroup_lock *bgl, unsigned int block_group)
  37 {
  38         return &bgl->locks[block_group & (NR_BG_LOCKS-1)].lock;
  39 }
  40 
  41 #endif

/* [<][>][^][v][top][bottom][index][help] */