root/fs/jfs/jfs_lock.h

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

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /*
   3  *   Copyright (C) International Business Machines Corp., 2000-2001
   4  *   Portions Copyright (C) Christoph Hellwig, 2001-2002
   5  */
   6 #ifndef _H_JFS_LOCK
   7 #define _H_JFS_LOCK
   8 
   9 #include <linux/spinlock.h>
  10 #include <linux/mutex.h>
  11 #include <linux/sched.h>
  12 
  13 /*
  14  *      jfs_lock.h
  15  */
  16 
  17 /*
  18  * Conditional sleep where condition is protected by spinlock
  19  *
  20  * lock_cmd and unlock_cmd take and release the spinlock
  21  */
  22 #define __SLEEP_COND(wq, cond, lock_cmd, unlock_cmd)    \
  23 do {                                                    \
  24         DECLARE_WAITQUEUE(__wait, current);             \
  25                                                         \
  26         add_wait_queue(&wq, &__wait);                   \
  27         for (;;) {                                      \
  28                 set_current_state(TASK_UNINTERRUPTIBLE);\
  29                 if (cond)                               \
  30                         break;                          \
  31                 unlock_cmd;                             \
  32                 io_schedule();                          \
  33                 lock_cmd;                               \
  34         }                                               \
  35         __set_current_state(TASK_RUNNING);                      \
  36         remove_wait_queue(&wq, &__wait);                \
  37 } while (0)
  38 
  39 #endif                          /* _H_JFS_LOCK */

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