/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_FS_UFS_LOCKFS_H
#define _SYS_FS_UFS_LOCKFS_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
/*
* Sun ufs file system locking (lockfs)
*
* ufs file system supports the following lock types:
* unlock - releasing existing locks, or do a file system flush
* name lock - no delete, no rename
* write lock - no update to file system, including delete
* delete lock - no delete, rename is allowed
* hard lock - no update, no access, cannot be unlocked
* - for supporting forcible umount
* error lock - no update, no access, may only be unlocked
* - once fs becomes clean, may be upgraded to
* - a hard lock
* error lock (read-only) -- not yet implemented --
* - no write changes allowed to fs, may be upgraded
* - to error or hard lock
* - degrades to panic on subsequent failures
*
* ufs_vnodeops(es) that conflict with the above file system lock types
* will get either suspended, or get a EAGAIN error,
* or get an EIO error if the file sytem is hard locked,
* or will block if the file system is error locked.
*
* There are exceptions.
* The following ufs_vnops do not obey the locking protocol:
* ufs_close, ufs_putpage, ufs_inactive, ufs_addmap, ufs_delmap,
* ufs_rwlock, ufs_rwunlock, ufs_poll.
*
* ul_vnops_cnt will get increment by 1 when a ufs vnodeops is entered;
* it will be decremented by 1 when a ufs_vnodeops is exited.
* A file system is in a quiescent state if ufs_vnops_cnt is zero.
* Since ufs_pageio() has to change ul_vnops_cnt without using ul_lock
* all users of ul_vnops_cnt increment and decrement it via atomic_add_long().
*/
/*
* ul_flag
*/
/*
* ul_fs_mod
*/
/*
* ul_fs_lock
*
* softlock will temporarily block most ufs_vnodeops.
* it is used so that a waiting lockfs command will not be starved
*
* fwlock will block other fallocate threads wanting to obtain a write lock
* on the file system.
*/
/* used by both ufs_getattr and ufs_getsecattr */
/* used by both ufs_setattr and ufs_setsecattr */
ULOCKFS_SLOCK | ULOCKFS_WLOCK | \
ULOCKFS_ROELOCK | ULOCKFS_SLOCK | \
/* GETPAGE breaks up into two masks */
struct ulockfs {
};
extern ulong_t ufs_quiesce_pend;
((struct ulockfs *) \
#ifdef __cplusplus
}
#endif
#endif /* _SYS_FS_UFS_LOCKFS_H */