title: Usage of conversion bitween the type with bitwise and non-bitwise
body: <p>Recently, I start to take a look at <code>dm-cache</code> which is a one of the kernel module.
  It has some tricky source code which converts between bitwise type and non-bitwise type.
  Here is the definition of variable type.</p>
  <pre><code>typedef uint64_t dm_block_t;
  typedef dm_block_t __bitwise__ dm_oblock_t;
  </code></pre>
  <p>And Here is some inline source code which converts between them.</p>
  <pre><code>static inline dm_oblock_t to_oblock(dm_block_t b)
  {
          return (__force dm_oblock_t) b;
  }
  
  static inline dm_block_t from_oblock(dm_oblock_t b)
  {
          return (__force dm_block_t) b;
  }
  </code></pre>
  <p>Why did they code like that?
  Can't we just use <code>uint64_t</code> or at least <code>dm_block_t</code>? I'm very confused since in the module there are many type conversion between bitwise and non-bitwise type variable.</p>
  <p>According to google, they said usage of <code>__bitwise__</code> prevents long type casting</p>
  <p>Then why not just use bitwise variable always? Thank you for your helps.</p>