jfs_lock.h (883B)
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) \ 23do { \ 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 */