mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 06:34:12 +08:00
[XFS] Resolve a namespace collision on vnode/vnodeops for FreeBSD porters.
SGI-PV: 953338 SGI-Modid: xfs-linux-melb:xfs-kern:26107a Signed-off-by: Nathan Scott <nathans@sgi.com>
This commit is contained in:
parent
b83bd13881
commit
67fcaa73ad
@ -76,7 +76,7 @@ xfs_page_trace(
|
||||
int mask)
|
||||
{
|
||||
xfs_inode_t *ip;
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
loff_t isize = i_size_read(inode);
|
||||
loff_t offset = page_offset(page);
|
||||
int delalloc = -1, unmapped = -1, unwritten = -1;
|
||||
@ -181,13 +181,12 @@ xfs_end_bio_unwritten(
|
||||
void *data)
|
||||
{
|
||||
xfs_ioend_t *ioend = data;
|
||||
vnode_t *vp = ioend->io_vnode;
|
||||
bhv_vnode_t *vp = ioend->io_vnode;
|
||||
xfs_off_t offset = ioend->io_offset;
|
||||
size_t size = ioend->io_size;
|
||||
int error;
|
||||
|
||||
if (likely(!ioend->io_error))
|
||||
VOP_BMAP(vp, offset, size, BMAPI_UNWRITTEN, NULL, NULL, error);
|
||||
bhv_vop_bmap(vp, offset, size, BMAPI_UNWRITTEN, NULL, NULL);
|
||||
xfs_destroy_ioend(ioend);
|
||||
}
|
||||
|
||||
@ -240,10 +239,10 @@ xfs_map_blocks(
|
||||
xfs_iomap_t *mapp,
|
||||
int flags)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
int error, nmaps = 1;
|
||||
|
||||
VOP_BMAP(vp, offset, count, flags, mapp, &nmaps, error);
|
||||
error = bhv_vop_bmap(vp, offset, count, flags, mapp, &nmaps);
|
||||
if (!error && (flags & (BMAPI_WRITE|BMAPI_ALLOCATE)))
|
||||
VMODIFY(vp);
|
||||
return -error;
|
||||
@ -1162,7 +1161,7 @@ xfs_vm_writepages(
|
||||
struct address_space *mapping,
|
||||
struct writeback_control *wbc)
|
||||
{
|
||||
struct vnode *vp = vn_from_inode(mapping->host);
|
||||
struct bhv_vnode *vp = vn_from_inode(mapping->host);
|
||||
|
||||
if (VN_TRUNC(vp))
|
||||
VUNTRUNCATE(vp);
|
||||
@ -1242,7 +1241,7 @@ __xfs_get_blocks(
|
||||
int direct,
|
||||
bmapi_flags_t flags)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
xfs_iomap_t iomap;
|
||||
xfs_off_t offset;
|
||||
ssize_t size;
|
||||
@ -1252,8 +1251,8 @@ __xfs_get_blocks(
|
||||
offset = (xfs_off_t)iblock << inode->i_blkbits;
|
||||
ASSERT(bh_result->b_size >= (1 << inode->i_blkbits));
|
||||
size = bh_result->b_size;
|
||||
VOP_BMAP(vp, offset, size,
|
||||
create ? flags : BMAPI_READ, &iomap, &niomap, error);
|
||||
error = bhv_vop_bmap(vp, offset, size,
|
||||
create ? flags : BMAPI_READ, &iomap, &niomap);
|
||||
if (error)
|
||||
return -error;
|
||||
if (niomap == 0)
|
||||
@ -1381,13 +1380,13 @@ xfs_vm_direct_IO(
|
||||
{
|
||||
struct file *file = iocb->ki_filp;
|
||||
struct inode *inode = file->f_mapping->host;
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
xfs_iomap_t iomap;
|
||||
int maps = 1;
|
||||
int error;
|
||||
ssize_t ret;
|
||||
|
||||
VOP_BMAP(vp, offset, 0, BMAPI_DEVICE, &iomap, &maps, error);
|
||||
error = bhv_vop_bmap(vp, offset, 0, BMAPI_DEVICE, &iomap, &maps);
|
||||
if (error)
|
||||
return -error;
|
||||
|
||||
@ -1420,14 +1419,12 @@ xfs_vm_bmap(
|
||||
sector_t block)
|
||||
{
|
||||
struct inode *inode = (struct inode *)mapping->host;
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
int error;
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
|
||||
vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address);
|
||||
|
||||
VOP_RWLOCK(vp, VRWLOCK_READ);
|
||||
VOP_FLUSH_PAGES(vp, (xfs_off_t)0, -1, 0, FI_REMAPF, error);
|
||||
VOP_RWUNLOCK(vp, VRWLOCK_READ);
|
||||
bhv_vop_rwlock(vp, VRWLOCK_READ);
|
||||
bhv_vop_flush_pages(vp, (xfs_off_t)0, -1, 0, FI_REMAPF);
|
||||
bhv_vop_rwunlock(vp, VRWLOCK_READ);
|
||||
return generic_block_bmap(mapping, block, xfs_get_blocks);
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,7 @@ typedef struct xfs_ioend {
|
||||
unsigned int io_type; /* delalloc / unwritten */
|
||||
int io_error; /* I/O error code */
|
||||
atomic_t io_remaining; /* hold count */
|
||||
struct vnode *io_vnode; /* file being written to */
|
||||
struct bhv_vnode *io_vnode; /* file being written to */
|
||||
struct buffer_head *io_buffer_head;/* buffer linked list head */
|
||||
struct buffer_head *io_buffer_tail;/* buffer linked list tail */
|
||||
size_t io_size; /* size of the extent */
|
||||
|
@ -136,7 +136,7 @@ xfs_fs_get_dentry(
|
||||
struct super_block *sb,
|
||||
void *data)
|
||||
{
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
struct inode *inode;
|
||||
struct dentry *result;
|
||||
bhv_vfs_t *vfsp = vfs_from_sb(sb);
|
||||
@ -160,12 +160,12 @@ xfs_fs_get_parent(
|
||||
struct dentry *child)
|
||||
{
|
||||
int error;
|
||||
vnode_t *vp, *cvp;
|
||||
bhv_vnode_t *vp, *cvp;
|
||||
struct dentry *parent;
|
||||
|
||||
cvp = NULL;
|
||||
vp = vn_from_inode(child->d_inode);
|
||||
VOP_LOOKUP(vp, &dotdot, &cvp, 0, NULL, NULL, error);
|
||||
error = bhv_vop_lookup(vp, &dotdot, &cvp, 0, NULL, NULL);
|
||||
if (unlikely(error))
|
||||
return ERR_PTR(-error);
|
||||
|
||||
|
@ -58,15 +58,12 @@ __xfs_file_read(
|
||||
{
|
||||
struct iovec iov = {buf, count};
|
||||
struct file *file = iocb->ki_filp;
|
||||
vnode_t *vp = vn_from_inode(file->f_dentry->d_inode);
|
||||
ssize_t rval;
|
||||
bhv_vnode_t *vp = vn_from_inode(file->f_dentry->d_inode);
|
||||
|
||||
BUG_ON(iocb->ki_pos != pos);
|
||||
|
||||
if (unlikely(file->f_flags & O_DIRECT))
|
||||
ioflags |= IO_ISDIRECT;
|
||||
VOP_READ(vp, iocb, &iov, 1, &iocb->ki_pos, ioflags, NULL, rval);
|
||||
return rval;
|
||||
return bhv_vop_read(vp, iocb, &iov, 1, &iocb->ki_pos, ioflags, NULL);
|
||||
}
|
||||
|
||||
STATIC ssize_t
|
||||
@ -100,15 +97,12 @@ __xfs_file_write(
|
||||
struct iovec iov = {(void __user *)buf, count};
|
||||
struct file *file = iocb->ki_filp;
|
||||
struct inode *inode = file->f_mapping->host;
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
ssize_t rval;
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
|
||||
BUG_ON(iocb->ki_pos != pos);
|
||||
if (unlikely(file->f_flags & O_DIRECT))
|
||||
ioflags |= IO_ISDIRECT;
|
||||
|
||||
VOP_WRITE(vp, iocb, &iov, 1, &iocb->ki_pos, ioflags, NULL, rval);
|
||||
return rval;
|
||||
return bhv_vop_write(vp, iocb, &iov, 1, &iocb->ki_pos, ioflags, NULL);
|
||||
}
|
||||
|
||||
STATIC ssize_t
|
||||
@ -140,7 +134,7 @@ __xfs_file_readv(
|
||||
loff_t *ppos)
|
||||
{
|
||||
struct inode *inode = file->f_mapping->host;
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
struct kiocb kiocb;
|
||||
ssize_t rval;
|
||||
|
||||
@ -149,7 +143,8 @@ __xfs_file_readv(
|
||||
|
||||
if (unlikely(file->f_flags & O_DIRECT))
|
||||
ioflags |= IO_ISDIRECT;
|
||||
VOP_READ(vp, &kiocb, iov, nr_segs, &kiocb.ki_pos, ioflags, NULL, rval);
|
||||
rval = bhv_vop_read(vp, &kiocb, iov, nr_segs,
|
||||
&kiocb.ki_pos, ioflags, NULL);
|
||||
|
||||
*ppos = kiocb.ki_pos;
|
||||
return rval;
|
||||
@ -184,7 +179,7 @@ __xfs_file_writev(
|
||||
loff_t *ppos)
|
||||
{
|
||||
struct inode *inode = file->f_mapping->host;
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
struct kiocb kiocb;
|
||||
ssize_t rval;
|
||||
|
||||
@ -193,7 +188,8 @@ __xfs_file_writev(
|
||||
if (unlikely(file->f_flags & O_DIRECT))
|
||||
ioflags |= IO_ISDIRECT;
|
||||
|
||||
VOP_WRITE(vp, &kiocb, iov, nr_segs, &kiocb.ki_pos, ioflags, NULL, rval);
|
||||
rval = bhv_vop_write(vp, &kiocb, iov, nr_segs,
|
||||
&kiocb.ki_pos, ioflags, NULL);
|
||||
|
||||
*ppos = kiocb.ki_pos;
|
||||
return rval;
|
||||
@ -227,11 +223,8 @@ xfs_file_sendfile(
|
||||
read_actor_t actor,
|
||||
void *target)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(filp->f_dentry->d_inode);
|
||||
ssize_t rval;
|
||||
|
||||
VOP_SENDFILE(vp, filp, pos, 0, count, actor, target, NULL, rval);
|
||||
return rval;
|
||||
return bhv_vop_sendfile(vn_from_inode(filp->f_dentry->d_inode),
|
||||
filp, pos, 0, count, actor, target, NULL);
|
||||
}
|
||||
|
||||
STATIC ssize_t
|
||||
@ -242,11 +235,8 @@ xfs_file_sendfile_invis(
|
||||
read_actor_t actor,
|
||||
void *target)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(filp->f_dentry->d_inode);
|
||||
ssize_t rval;
|
||||
|
||||
VOP_SENDFILE(vp, filp, pos, IO_INVIS, count, actor, target, NULL, rval);
|
||||
return rval;
|
||||
return bhv_vop_sendfile(vn_from_inode(filp->f_dentry->d_inode),
|
||||
filp, pos, IO_INVIS, count, actor, target, NULL);
|
||||
}
|
||||
|
||||
STATIC ssize_t
|
||||
@ -257,11 +247,8 @@ xfs_file_splice_read(
|
||||
size_t len,
|
||||
unsigned int flags)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(infilp->f_dentry->d_inode);
|
||||
ssize_t rval;
|
||||
|
||||
VOP_SPLICE_READ(vp, infilp, ppos, pipe, len, flags, 0, NULL, rval);
|
||||
return rval;
|
||||
return bhv_vop_splice_read(vn_from_inode(infilp->f_dentry->d_inode),
|
||||
infilp, ppos, pipe, len, flags, 0, NULL);
|
||||
}
|
||||
|
||||
STATIC ssize_t
|
||||
@ -272,11 +259,9 @@ xfs_file_splice_read_invis(
|
||||
size_t len,
|
||||
unsigned int flags)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(infilp->f_dentry->d_inode);
|
||||
ssize_t rval;
|
||||
|
||||
VOP_SPLICE_READ(vp, infilp, ppos, pipe, len, flags, IO_INVIS, NULL, rval);
|
||||
return rval;
|
||||
return bhv_vop_splice_read(vn_from_inode(infilp->f_dentry->d_inode),
|
||||
infilp, ppos, pipe, len, flags, IO_INVIS,
|
||||
NULL);
|
||||
}
|
||||
|
||||
STATIC ssize_t
|
||||
@ -287,11 +272,8 @@ xfs_file_splice_write(
|
||||
size_t len,
|
||||
unsigned int flags)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(outfilp->f_dentry->d_inode);
|
||||
ssize_t rval;
|
||||
|
||||
VOP_SPLICE_WRITE(vp, pipe, outfilp, ppos, len, flags, 0, NULL, rval);
|
||||
return rval;
|
||||
return bhv_vop_splice_write(vn_from_inode(outfilp->f_dentry->d_inode),
|
||||
pipe, outfilp, ppos, len, flags, 0, NULL);
|
||||
}
|
||||
|
||||
STATIC ssize_t
|
||||
@ -302,11 +284,9 @@ xfs_file_splice_write_invis(
|
||||
size_t len,
|
||||
unsigned int flags)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(outfilp->f_dentry->d_inode);
|
||||
ssize_t rval;
|
||||
|
||||
VOP_SPLICE_WRITE(vp, pipe, outfilp, ppos, len, flags, IO_INVIS, NULL, rval);
|
||||
return rval;
|
||||
return bhv_vop_splice_write(vn_from_inode(outfilp->f_dentry->d_inode),
|
||||
pipe, outfilp, ppos, len, flags, IO_INVIS,
|
||||
NULL);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
@ -314,24 +294,17 @@ xfs_file_open(
|
||||
struct inode *inode,
|
||||
struct file *filp)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
int error;
|
||||
|
||||
if (!(filp->f_flags & O_LARGEFILE) && i_size_read(inode) > MAX_NON_LFS)
|
||||
return -EFBIG;
|
||||
VOP_OPEN(vp, NULL, error);
|
||||
return -error;
|
||||
return -bhv_vop_open(vn_from_inode(inode), NULL);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
xfs_file_close(
|
||||
struct file *filp)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(filp->f_dentry->d_inode);
|
||||
int error;
|
||||
|
||||
VOP_CLOSE(vp, 0, file_count(filp) > 1 ? L_FALSE : L_TRUE, NULL, error);
|
||||
return -error;
|
||||
return -bhv_vop_close(vn_from_inode(filp->f_dentry->d_inode), 0,
|
||||
file_count(filp) > 1 ? L_FALSE : L_TRUE, NULL);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
@ -339,12 +312,11 @@ xfs_file_release(
|
||||
struct inode *inode,
|
||||
struct file *filp)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
int error = 0;
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
|
||||
if (vp)
|
||||
VOP_RELEASE(vp, error);
|
||||
return -error;
|
||||
return -bhv_vop_release(vp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
STATIC int
|
||||
@ -353,17 +325,14 @@ xfs_file_fsync(
|
||||
struct dentry *dentry,
|
||||
int datasync)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
int error;
|
||||
bhv_vnode_t *vp = vn_from_inode(dentry->d_inode);
|
||||
int flags = FSYNC_WAIT;
|
||||
|
||||
if (datasync)
|
||||
flags |= FSYNC_DATA;
|
||||
if (VN_TRUNC(vp))
|
||||
VUNTRUNCATE(vp);
|
||||
VOP_FSYNC(vp, flags, NULL, (xfs_off_t)0, (xfs_off_t)-1, error);
|
||||
return -error;
|
||||
return -bhv_vop_fsync(vp, flags, NULL, (xfs_off_t)0, (xfs_off_t)-1);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_XFS_DMAPI
|
||||
@ -374,7 +343,7 @@ xfs_vm_nopage(
|
||||
int *type)
|
||||
{
|
||||
struct inode *inode = area->vm_file->f_dentry->d_inode;
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
|
||||
ASSERT_ALWAYS(vp->v_vfsp->vfs_flag & VFS_DMI);
|
||||
if (XFS_SEND_MMAP(XFS_VFSTOM(vp->v_vfsp), area, 0))
|
||||
@ -390,7 +359,7 @@ xfs_file_readdir(
|
||||
filldir_t filldir)
|
||||
{
|
||||
int error = 0;
|
||||
vnode_t *vp = vn_from_inode(filp->f_dentry->d_inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(filp->f_dentry->d_inode);
|
||||
uio_t uio;
|
||||
iovec_t iov;
|
||||
int eof = 0;
|
||||
@ -425,7 +394,7 @@ xfs_file_readdir(
|
||||
|
||||
start_offset = uio.uio_offset;
|
||||
|
||||
VOP_READDIR(vp, &uio, NULL, &eof, error);
|
||||
error = bhv_vop_readdir(vp, &uio, NULL, &eof);
|
||||
if ((uio.uio_offset == start_offset) || error) {
|
||||
size = 0;
|
||||
break;
|
||||
@ -475,18 +444,17 @@ xfs_file_mmap(
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
STATIC long
|
||||
xfs_file_ioctl(
|
||||
struct file *filp,
|
||||
unsigned int cmd,
|
||||
unsigned long arg)
|
||||
unsigned long p)
|
||||
{
|
||||
int error;
|
||||
struct inode *inode = filp->f_dentry->d_inode;
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
|
||||
VOP_IOCTL(vp, inode, filp, 0, cmd, (void __user *)arg, error);
|
||||
error = bhv_vop_ioctl(vp, inode, filp, 0, cmd, (void __user *)p);
|
||||
VMODIFY(vp);
|
||||
|
||||
/* NOTE: some of the ioctl's return positive #'s as a
|
||||
@ -502,13 +470,13 @@ STATIC long
|
||||
xfs_file_ioctl_invis(
|
||||
struct file *filp,
|
||||
unsigned int cmd,
|
||||
unsigned long arg)
|
||||
unsigned long p)
|
||||
{
|
||||
struct inode *inode = filp->f_dentry->d_inode;
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
int error;
|
||||
struct inode *inode = filp->f_dentry->d_inode;
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
|
||||
VOP_IOCTL(vp, inode, filp, IO_INVIS, cmd, (void __user *)arg, error);
|
||||
error = bhv_vop_ioctl(vp, inode, filp, IO_INVIS, cmd, (void __user *)p);
|
||||
VMODIFY(vp);
|
||||
|
||||
/* NOTE: some of the ioctl's return positive #'s as a
|
||||
@ -527,7 +495,7 @@ xfs_vm_mprotect(
|
||||
struct vm_area_struct *vma,
|
||||
unsigned int newflags)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(vma->vm_file->f_dentry->d_inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(vma->vm_file->f_dentry->d_inode);
|
||||
int error = 0;
|
||||
|
||||
if (vp->v_vfsp->vfs_flag & VFS_DMI) {
|
||||
@ -553,7 +521,7 @@ STATIC int
|
||||
xfs_file_open_exec(
|
||||
struct inode *inode)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
xfs_mount_t *mp = XFS_VFSTOM(vp->v_vfsp);
|
||||
int error = 0;
|
||||
xfs_inode_t *ip;
|
||||
|
@ -28,7 +28,7 @@ fs_tosspages(
|
||||
xfs_off_t last,
|
||||
int fiopt)
|
||||
{
|
||||
vnode_t *vp = BHV_TO_VNODE(bdp);
|
||||
bhv_vnode_t *vp = BHV_TO_VNODE(bdp);
|
||||
struct inode *ip = vn_to_inode(vp);
|
||||
|
||||
if (VN_CACHED(vp))
|
||||
@ -42,7 +42,7 @@ fs_flushinval_pages(
|
||||
xfs_off_t last,
|
||||
int fiopt)
|
||||
{
|
||||
vnode_t *vp = BHV_TO_VNODE(bdp);
|
||||
bhv_vnode_t *vp = BHV_TO_VNODE(bdp);
|
||||
struct inode *ip = vn_to_inode(vp);
|
||||
|
||||
if (VN_CACHED(vp)) {
|
||||
@ -61,7 +61,7 @@ fs_flush_pages(
|
||||
uint64_t flags,
|
||||
int fiopt)
|
||||
{
|
||||
vnode_t *vp = BHV_TO_VNODE(bdp);
|
||||
bhv_vnode_t *vp = BHV_TO_VNODE(bdp);
|
||||
struct inode *ip = vn_to_inode(vp);
|
||||
|
||||
if (VN_DIRTY(vp)) {
|
||||
|
@ -78,7 +78,7 @@ xfs_find_handle(
|
||||
xfs_handle_t handle;
|
||||
xfs_fsop_handlereq_t hreq;
|
||||
struct inode *inode;
|
||||
struct vnode *vp;
|
||||
bhv_vnode_t *vp;
|
||||
|
||||
if (copy_from_user(&hreq, arg, sizeof(hreq)))
|
||||
return -XFS_ERROR(EFAULT);
|
||||
@ -192,7 +192,7 @@ xfs_vget_fsop_handlereq(
|
||||
xfs_mount_t *mp,
|
||||
struct inode *parinode, /* parent inode pointer */
|
||||
xfs_fsop_handlereq_t *hreq,
|
||||
vnode_t **vp,
|
||||
bhv_vnode_t **vp,
|
||||
struct inode **inode)
|
||||
{
|
||||
void __user *hanp;
|
||||
@ -202,7 +202,7 @@ xfs_vget_fsop_handlereq(
|
||||
xfs_handle_t handle;
|
||||
xfs_inode_t *ip;
|
||||
struct inode *inodep;
|
||||
vnode_t *vpp;
|
||||
bhv_vnode_t *vpp;
|
||||
xfs_ino_t ino;
|
||||
__u32 igen;
|
||||
int error;
|
||||
@ -277,7 +277,7 @@ xfs_open_by_handle(
|
||||
struct file *filp;
|
||||
struct inode *inode;
|
||||
struct dentry *dentry;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
xfs_fsop_handlereq_t hreq;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
@ -362,7 +362,7 @@ xfs_readlink_by_handle(
|
||||
struct uio auio;
|
||||
struct inode *inode;
|
||||
xfs_fsop_handlereq_t hreq;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
__u32 olen;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
@ -393,9 +393,11 @@ xfs_readlink_by_handle(
|
||||
auio.uio_segflg = UIO_USERSPACE;
|
||||
auio.uio_resid = olen;
|
||||
|
||||
VOP_READLINK(vp, &auio, IO_INVIS, NULL, error);
|
||||
|
||||
error = bhv_vop_readlink(vp, &auio, IO_INVIS, NULL);
|
||||
VN_RELE(vp);
|
||||
if (error)
|
||||
return -error;
|
||||
|
||||
return (olen - auio.uio_resid);
|
||||
}
|
||||
|
||||
@ -411,7 +413,7 @@ xfs_fssetdm_by_handle(
|
||||
xfs_fsop_setdm_handlereq_t dmhreq;
|
||||
struct inode *inode;
|
||||
bhv_desc_t *bdp;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
|
||||
if (!capable(CAP_MKNOD))
|
||||
return -XFS_ERROR(EPERM);
|
||||
@ -452,7 +454,7 @@ xfs_attrlist_by_handle(
|
||||
attrlist_cursor_kern_t *cursor;
|
||||
xfs_fsop_attrlist_handlereq_t al_hreq;
|
||||
struct inode *inode;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
char *kbuf;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
@ -472,8 +474,8 @@ xfs_attrlist_by_handle(
|
||||
goto out_vn_rele;
|
||||
|
||||
cursor = (attrlist_cursor_kern_t *)&al_hreq.pos;
|
||||
VOP_ATTR_LIST(vp, kbuf, al_hreq.buflen, al_hreq.flags,
|
||||
cursor, NULL, error);
|
||||
error = bhv_vop_attr_list(vp, kbuf, al_hreq.buflen, al_hreq.flags,
|
||||
cursor, NULL);
|
||||
if (error)
|
||||
goto out_kfree;
|
||||
|
||||
@ -490,7 +492,7 @@ xfs_attrlist_by_handle(
|
||||
|
||||
STATIC int
|
||||
xfs_attrmulti_attr_get(
|
||||
struct vnode *vp,
|
||||
bhv_vnode_t *vp,
|
||||
char *name,
|
||||
char __user *ubuf,
|
||||
__uint32_t *len,
|
||||
@ -505,7 +507,7 @@ xfs_attrmulti_attr_get(
|
||||
if (!kbuf)
|
||||
return ENOMEM;
|
||||
|
||||
VOP_ATTR_GET(vp, name, kbuf, len, flags, NULL, error);
|
||||
error = bhv_vop_attr_get(vp, name, kbuf, len, flags, NULL);
|
||||
if (error)
|
||||
goto out_kfree;
|
||||
|
||||
@ -519,7 +521,7 @@ xfs_attrmulti_attr_get(
|
||||
|
||||
STATIC int
|
||||
xfs_attrmulti_attr_set(
|
||||
struct vnode *vp,
|
||||
bhv_vnode_t *vp,
|
||||
char *name,
|
||||
const char __user *ubuf,
|
||||
__uint32_t len,
|
||||
@ -542,7 +544,7 @@ xfs_attrmulti_attr_set(
|
||||
if (copy_from_user(kbuf, ubuf, len))
|
||||
goto out_kfree;
|
||||
|
||||
VOP_ATTR_SET(vp, name, kbuf, len, flags, NULL, error);
|
||||
error = bhv_vop_attr_set(vp, name, kbuf, len, flags, NULL);
|
||||
|
||||
out_kfree:
|
||||
kfree(kbuf);
|
||||
@ -551,20 +553,15 @@ xfs_attrmulti_attr_set(
|
||||
|
||||
STATIC int
|
||||
xfs_attrmulti_attr_remove(
|
||||
struct vnode *vp,
|
||||
bhv_vnode_t *vp,
|
||||
char *name,
|
||||
__uint32_t flags)
|
||||
{
|
||||
int error;
|
||||
|
||||
|
||||
if (IS_RDONLY(&vp->v_inode))
|
||||
return -EROFS;
|
||||
if (IS_IMMUTABLE(&vp->v_inode) || IS_APPEND(&vp->v_inode))
|
||||
return EPERM;
|
||||
|
||||
VOP_ATTR_REMOVE(vp, name, flags, NULL, error);
|
||||
return error;
|
||||
return bhv_vop_attr_remove(vp, name, flags, NULL);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
@ -578,7 +575,7 @@ xfs_attrmulti_by_handle(
|
||||
xfs_attr_multiop_t *ops;
|
||||
xfs_fsop_attrmulti_handlereq_t am_hreq;
|
||||
struct inode *inode;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
unsigned int i, size;
|
||||
char *attr_name;
|
||||
|
||||
@ -658,7 +655,7 @@ xfs_attrmulti_by_handle(
|
||||
STATIC int
|
||||
xfs_ioc_space(
|
||||
bhv_desc_t *bdp,
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
struct file *filp,
|
||||
int flags,
|
||||
unsigned int cmd,
|
||||
@ -682,7 +679,7 @@ xfs_ioc_fsgeometry(
|
||||
|
||||
STATIC int
|
||||
xfs_ioc_xattr(
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
xfs_inode_t *ip,
|
||||
struct file *filp,
|
||||
unsigned int cmd,
|
||||
@ -711,7 +708,7 @@ xfs_ioctl(
|
||||
void __user *arg)
|
||||
{
|
||||
int error;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
xfs_inode_t *ip;
|
||||
xfs_mount_t *mp;
|
||||
|
||||
@ -962,7 +959,7 @@ xfs_ioctl(
|
||||
STATIC int
|
||||
xfs_ioc_space(
|
||||
bhv_desc_t *bdp,
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
struct file *filp,
|
||||
int ioflags,
|
||||
unsigned int cmd,
|
||||
@ -1153,7 +1150,7 @@ xfs_di2lxflags(
|
||||
|
||||
STATIC int
|
||||
xfs_ioc_xattr(
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
xfs_inode_t *ip,
|
||||
struct file *filp,
|
||||
unsigned int cmd,
|
||||
@ -1173,7 +1170,7 @@ xfs_ioc_xattr(
|
||||
case XFS_IOC_FSGETXATTR: {
|
||||
vattr->va_mask = XFS_AT_XFLAGS | XFS_AT_EXTSIZE | \
|
||||
XFS_AT_NEXTENTS | XFS_AT_PROJID;
|
||||
VOP_GETATTR(vp, vattr, 0, NULL, error);
|
||||
error = bhv_vop_getattr(vp, vattr, 0, NULL);
|
||||
if (unlikely(error)) {
|
||||
error = -error;
|
||||
break;
|
||||
@ -1206,7 +1203,7 @@ xfs_ioc_xattr(
|
||||
vattr->va_extsize = fa.fsx_extsize;
|
||||
vattr->va_projid = fa.fsx_projid;
|
||||
|
||||
VOP_SETATTR(vp, vattr, attr_flags, NULL, error);
|
||||
error = bhv_vop_setattr(vp, vattr, attr_flags, NULL);
|
||||
if (likely(!error))
|
||||
__vn_revalidate(vp, vattr); /* update flags */
|
||||
error = -error;
|
||||
@ -1216,7 +1213,7 @@ xfs_ioc_xattr(
|
||||
case XFS_IOC_FSGETXATTRA: {
|
||||
vattr->va_mask = XFS_AT_XFLAGS | XFS_AT_EXTSIZE | \
|
||||
XFS_AT_ANEXTENTS | XFS_AT_PROJID;
|
||||
VOP_GETATTR(vp, vattr, 0, NULL, error);
|
||||
error = bhv_vop_getattr(vp, vattr, 0, NULL);
|
||||
if (unlikely(error)) {
|
||||
error = -error;
|
||||
break;
|
||||
@ -1262,7 +1259,7 @@ xfs_ioc_xattr(
|
||||
vattr->va_xflags = xfs_merge_ioc_xflags(flags,
|
||||
xfs_ip2xflags(ip));
|
||||
|
||||
VOP_SETATTR(vp, vattr, attr_flags, NULL, error);
|
||||
error = bhv_vop_setattr(vp, vattr, attr_flags, NULL);
|
||||
if (likely(!error))
|
||||
__vn_revalidate(vp, vattr); /* update flags */
|
||||
error = -error;
|
||||
|
@ -114,7 +114,7 @@ xfs_compat_ioctl(
|
||||
unsigned long arg)
|
||||
{
|
||||
struct inode *inode = file->f_dentry->d_inode;
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
int error;
|
||||
|
||||
switch (cmd) {
|
||||
@ -193,7 +193,7 @@ xfs_compat_ioctl(
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
|
||||
VOP_IOCTL(vp, inode, file, mode, cmd, (void __user *)arg, error);
|
||||
error = bhv_vop_ioctl(vp, inode, file, mode, cmd, (void __user *)arg);
|
||||
VMODIFY(vp);
|
||||
|
||||
return error;
|
||||
|
@ -61,7 +61,7 @@
|
||||
*/
|
||||
xfs_inode_t *
|
||||
xfs_vtoi(
|
||||
struct vnode *vp)
|
||||
bhv_vnode_t *vp)
|
||||
{
|
||||
bhv_desc_t *bdp;
|
||||
|
||||
@ -80,7 +80,7 @@ void
|
||||
xfs_synchronize_atime(
|
||||
xfs_inode_t *ip)
|
||||
{
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
|
||||
vp = XFS_ITOV_NULL(ip);
|
||||
if (vp) {
|
||||
@ -202,12 +202,8 @@ xfs_validate_fields(
|
||||
struct inode *ip,
|
||||
struct vattr *vattr)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(ip);
|
||||
int error;
|
||||
|
||||
vattr->va_mask = XFS_AT_NLINK|XFS_AT_SIZE|XFS_AT_NBLOCKS;
|
||||
VOP_GETATTR(vp, vattr, ATTR_LAZY, NULL, error);
|
||||
if (likely(!error)) {
|
||||
if (!bhv_vop_getattr(vn_from_inode(ip), vattr, ATTR_LAZY, NULL)) {
|
||||
ip->i_nlink = vattr->va_nlink;
|
||||
ip->i_blocks = vattr->va_nblocks;
|
||||
|
||||
@ -225,7 +221,7 @@ xfs_validate_fields(
|
||||
*/
|
||||
STATIC int
|
||||
xfs_init_security(
|
||||
struct vnode *vp,
|
||||
bhv_vnode_t *vp,
|
||||
struct inode *dir)
|
||||
{
|
||||
struct inode *ip = vn_to_inode(vp);
|
||||
@ -241,7 +237,7 @@ xfs_init_security(
|
||||
return -error;
|
||||
}
|
||||
|
||||
VOP_ATTR_SET(vp, name, value, length, ATTR_SECURE, NULL, error);
|
||||
error = bhv_vop_attr_set(vp, name, value, length, ATTR_SECURE, NULL);
|
||||
if (!error)
|
||||
VMODIFY(vp);
|
||||
|
||||
@ -264,13 +260,12 @@ xfs_has_fs_struct(struct task_struct *task)
|
||||
|
||||
STATIC inline void
|
||||
xfs_cleanup_inode(
|
||||
vnode_t *dvp,
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *dvp,
|
||||
bhv_vnode_t *vp,
|
||||
struct dentry *dentry,
|
||||
int mode)
|
||||
{
|
||||
struct dentry teardown = {};
|
||||
int error;
|
||||
|
||||
/* Oh, the horror.
|
||||
* If we can't add the ACL or we fail in
|
||||
@ -281,9 +276,9 @@ xfs_cleanup_inode(
|
||||
teardown.d_name = dentry->d_name;
|
||||
|
||||
if (S_ISDIR(mode))
|
||||
VOP_RMDIR(dvp, &teardown, NULL, error);
|
||||
bhv_vop_rmdir(dvp, &teardown, NULL);
|
||||
else
|
||||
VOP_REMOVE(dvp, &teardown, NULL, error);
|
||||
bhv_vop_remove(dvp, &teardown, NULL);
|
||||
VN_RELE(vp);
|
||||
}
|
||||
|
||||
@ -296,7 +291,7 @@ xfs_vn_mknod(
|
||||
{
|
||||
struct inode *ip;
|
||||
vattr_t vattr = { 0 };
|
||||
vnode_t *vp = NULL, *dvp = vn_from_inode(dir);
|
||||
bhv_vnode_t *vp = NULL, *dvp = vn_from_inode(dir);
|
||||
xfs_acl_t *default_acl = NULL;
|
||||
attrexists_t test_default_acl = _ACL_DEFAULT_EXISTS;
|
||||
int error;
|
||||
@ -330,10 +325,10 @@ xfs_vn_mknod(
|
||||
vattr.va_mask |= XFS_AT_RDEV;
|
||||
/*FALLTHROUGH*/
|
||||
case S_IFREG:
|
||||
VOP_CREATE(dvp, dentry, &vattr, &vp, NULL, error);
|
||||
error = bhv_vop_create(dvp, dentry, &vattr, &vp, NULL);
|
||||
break;
|
||||
case S_IFDIR:
|
||||
VOP_MKDIR(dvp, dentry, &vattr, &vp, NULL, error);
|
||||
error = bhv_vop_mkdir(dvp, dentry, &vattr, &vp, NULL);
|
||||
break;
|
||||
default:
|
||||
error = EINVAL;
|
||||
@ -396,14 +391,14 @@ xfs_vn_lookup(
|
||||
struct dentry *dentry,
|
||||
struct nameidata *nd)
|
||||
{
|
||||
struct vnode *vp = vn_from_inode(dir), *cvp;
|
||||
bhv_vnode_t *vp = vn_from_inode(dir), *cvp;
|
||||
int error;
|
||||
|
||||
if (dentry->d_name.len >= MAXNAMELEN)
|
||||
return ERR_PTR(-ENAMETOOLONG);
|
||||
|
||||
VOP_LOOKUP(vp, dentry, &cvp, 0, NULL, NULL, error);
|
||||
if (error) {
|
||||
error = bhv_vop_lookup(vp, dentry, &cvp, 0, NULL, NULL);
|
||||
if (unlikely(error)) {
|
||||
if (unlikely(error != ENOENT))
|
||||
return ERR_PTR(-error);
|
||||
d_add(dentry, NULL);
|
||||
@ -420,8 +415,8 @@ xfs_vn_link(
|
||||
struct dentry *dentry)
|
||||
{
|
||||
struct inode *ip; /* inode of guy being linked to */
|
||||
vnode_t *tdvp; /* target directory for new name/link */
|
||||
vnode_t *vp; /* vp of name being linked */
|
||||
bhv_vnode_t *tdvp; /* target directory for new name/link */
|
||||
bhv_vnode_t *vp; /* vp of name being linked */
|
||||
vattr_t vattr;
|
||||
int error;
|
||||
|
||||
@ -432,7 +427,7 @@ xfs_vn_link(
|
||||
tdvp = vn_from_inode(dir);
|
||||
vp = vn_from_inode(ip);
|
||||
|
||||
VOP_LINK(tdvp, vp, dentry, NULL, error);
|
||||
error = bhv_vop_link(tdvp, vp, dentry, NULL);
|
||||
if (likely(!error)) {
|
||||
VMODIFY(tdvp);
|
||||
VN_HOLD(vp);
|
||||
@ -448,14 +443,14 @@ xfs_vn_unlink(
|
||||
struct dentry *dentry)
|
||||
{
|
||||
struct inode *inode;
|
||||
vnode_t *dvp; /* directory containing name to remove */
|
||||
bhv_vnode_t *dvp; /* directory containing name to remove */
|
||||
vattr_t vattr;
|
||||
int error;
|
||||
|
||||
inode = dentry->d_inode;
|
||||
dvp = vn_from_inode(dir);
|
||||
|
||||
VOP_REMOVE(dvp, dentry, NULL, error);
|
||||
error = bhv_vop_remove(dvp, dentry, NULL);
|
||||
if (likely(!error)) {
|
||||
xfs_validate_fields(dir, &vattr); /* size needs update */
|
||||
xfs_validate_fields(inode, &vattr);
|
||||
@ -470,27 +465,26 @@ xfs_vn_symlink(
|
||||
const char *symname)
|
||||
{
|
||||
struct inode *ip;
|
||||
vattr_t vattr = { 0 };
|
||||
vnode_t *dvp; /* directory containing name of symlink */
|
||||
vnode_t *cvp; /* used to lookup symlink to put in dentry */
|
||||
vattr_t va = { 0 };
|
||||
bhv_vnode_t *dvp; /* directory containing name of symlink */
|
||||
bhv_vnode_t *cvp; /* used to lookup symlink to put in dentry */
|
||||
int error;
|
||||
|
||||
dvp = vn_from_inode(dir);
|
||||
cvp = NULL;
|
||||
|
||||
vattr.va_mode = S_IFLNK |
|
||||
va.va_mode = S_IFLNK |
|
||||
(irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO);
|
||||
vattr.va_mask = XFS_AT_TYPE|XFS_AT_MODE;
|
||||
va.va_mask = XFS_AT_TYPE|XFS_AT_MODE;
|
||||
|
||||
error = 0;
|
||||
VOP_SYMLINK(dvp, dentry, &vattr, (char *)symname, &cvp, NULL, error);
|
||||
error = bhv_vop_symlink(dvp, dentry, &va, (char *)symname, &cvp, NULL);
|
||||
if (likely(!error && cvp)) {
|
||||
error = xfs_init_security(cvp, dir);
|
||||
if (likely(!error)) {
|
||||
ip = vn_to_inode(cvp);
|
||||
d_instantiate(dentry, ip);
|
||||
xfs_validate_fields(dir, &vattr);
|
||||
xfs_validate_fields(ip, &vattr);
|
||||
xfs_validate_fields(dir, &va);
|
||||
xfs_validate_fields(ip, &va);
|
||||
} else {
|
||||
xfs_cleanup_inode(dvp, cvp, dentry, 0);
|
||||
}
|
||||
@ -504,11 +498,11 @@ xfs_vn_rmdir(
|
||||
struct dentry *dentry)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
vnode_t *dvp = vn_from_inode(dir);
|
||||
bhv_vnode_t *dvp = vn_from_inode(dir);
|
||||
vattr_t vattr;
|
||||
int error;
|
||||
|
||||
VOP_RMDIR(dvp, dentry, NULL, error);
|
||||
error = bhv_vop_rmdir(dvp, dentry, NULL);
|
||||
if (likely(!error)) {
|
||||
xfs_validate_fields(inode, &vattr);
|
||||
xfs_validate_fields(dir, &vattr);
|
||||
@ -524,15 +518,15 @@ xfs_vn_rename(
|
||||
struct dentry *ndentry)
|
||||
{
|
||||
struct inode *new_inode = ndentry->d_inode;
|
||||
vnode_t *fvp; /* from directory */
|
||||
vnode_t *tvp; /* target directory */
|
||||
bhv_vnode_t *fvp; /* from directory */
|
||||
bhv_vnode_t *tvp; /* target directory */
|
||||
vattr_t vattr;
|
||||
int error;
|
||||
|
||||
fvp = vn_from_inode(odir);
|
||||
tvp = vn_from_inode(ndir);
|
||||
|
||||
VOP_RENAME(fvp, odentry, tvp, ndentry, NULL, error);
|
||||
error = bhv_vop_rename(fvp, odentry, tvp, ndentry, NULL);
|
||||
if (likely(!error)) {
|
||||
if (new_inode)
|
||||
xfs_validate_fields(new_inode, &vattr);
|
||||
@ -553,7 +547,7 @@ xfs_vn_follow_link(
|
||||
struct dentry *dentry,
|
||||
struct nameidata *nd)
|
||||
{
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
uio_t *uio;
|
||||
iovec_t iov;
|
||||
int error;
|
||||
@ -586,8 +580,8 @@ xfs_vn_follow_link(
|
||||
uio->uio_resid = MAXPATHLEN;
|
||||
uio->uio_iovcnt = 1;
|
||||
|
||||
VOP_READLINK(vp, uio, 0, NULL, error);
|
||||
if (error) {
|
||||
error = bhv_vop_readlink(vp, uio, 0, NULL);
|
||||
if (unlikely(error)) {
|
||||
kfree(link);
|
||||
link = ERR_PTR(-error);
|
||||
} else {
|
||||
@ -618,12 +612,7 @@ xfs_vn_permission(
|
||||
int mode,
|
||||
struct nameidata *nd)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
int error;
|
||||
|
||||
mode <<= 6; /* convert from linux to vnode access bits */
|
||||
VOP_ACCESS(vp, mode, NULL, error);
|
||||
return -error;
|
||||
return -bhv_vop_access(vn_from_inode(inode), mode << 6, NULL);
|
||||
}
|
||||
#else
|
||||
#define xfs_vn_permission NULL
|
||||
@ -636,7 +625,7 @@ xfs_vn_getattr(
|
||||
struct kstat *stat)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
int error = 0;
|
||||
|
||||
if (unlikely(vp->v_flag & VMODIFIED))
|
||||
@ -653,7 +642,7 @@ xfs_vn_setattr(
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
unsigned int ia_valid = attr->ia_valid;
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
vattr_t vattr = { 0 };
|
||||
int flags = 0;
|
||||
int error;
|
||||
@ -697,7 +686,7 @@ xfs_vn_setattr(
|
||||
flags |= ATTR_NONBLOCK;
|
||||
#endif
|
||||
|
||||
VOP_SETATTR(vp, &vattr, flags, NULL, error);
|
||||
error = bhv_vop_setattr(vp, &vattr, flags, NULL);
|
||||
if (likely(!error))
|
||||
__vn_revalidate(vp, &vattr);
|
||||
return -error;
|
||||
@ -718,7 +707,7 @@ xfs_vn_setxattr(
|
||||
size_t size,
|
||||
int flags)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(dentry->d_inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(dentry->d_inode);
|
||||
char *attr = (char *)name;
|
||||
attrnames_t *namesp;
|
||||
int xflags = 0;
|
||||
@ -748,7 +737,7 @@ xfs_vn_getxattr(
|
||||
void *data,
|
||||
size_t size)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(dentry->d_inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(dentry->d_inode);
|
||||
char *attr = (char *)name;
|
||||
attrnames_t *namesp;
|
||||
int xflags = 0;
|
||||
@ -777,7 +766,7 @@ xfs_vn_listxattr(
|
||||
char *data,
|
||||
size_t size)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(dentry->d_inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(dentry->d_inode);
|
||||
int error, xflags = ATTR_KERNAMELS;
|
||||
ssize_t result;
|
||||
|
||||
@ -796,7 +785,7 @@ xfs_vn_removexattr(
|
||||
struct dentry *dentry,
|
||||
const char *name)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(dentry->d_inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(dentry->d_inode);
|
||||
char *attr = (char *)name;
|
||||
attrnames_t *namesp;
|
||||
int xflags = 0;
|
||||
|
@ -206,7 +206,7 @@ xfs_read(
|
||||
xfs_fsize_t n;
|
||||
xfs_inode_t *ip;
|
||||
xfs_mount_t *mp;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
unsigned long seg;
|
||||
|
||||
ip = XFS_BHVTOI(bdp);
|
||||
@ -271,7 +271,7 @@ xfs_read(
|
||||
}
|
||||
|
||||
if (unlikely((ioflags & IO_ISDIRECT) && VN_CACHED(vp)))
|
||||
VOP_FLUSHINVAL_PAGES(vp, ctooff(offtoct(*offset)),
|
||||
bhv_vop_flushinval_pages(vp, ctooff(offtoct(*offset)),
|
||||
-1, FI_REMAPF_LOCKED);
|
||||
|
||||
xfs_rw_enter_trace(XFS_READ_ENTER, &ip->i_iocore,
|
||||
@ -499,7 +499,7 @@ xfs_zero_last_block(
|
||||
|
||||
int /* error (positive) */
|
||||
xfs_zero_eof(
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
xfs_iocore_t *io,
|
||||
xfs_off_t offset, /* starting I/O offset */
|
||||
xfs_fsize_t isize, /* current inode size */
|
||||
@ -626,7 +626,7 @@ xfs_write(
|
||||
ssize_t ret = 0, error = 0;
|
||||
xfs_fsize_t isize, new_size;
|
||||
xfs_iocore_t *io;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
unsigned long seg;
|
||||
int iolock;
|
||||
int eventsent = 0;
|
||||
@ -803,7 +803,7 @@ retry:
|
||||
if (need_flush) {
|
||||
xfs_inval_cached_trace(io, pos, -1,
|
||||
ctooff(offtoct(pos)), -1);
|
||||
VOP_FLUSHINVAL_PAGES(vp, ctooff(offtoct(pos)),
|
||||
bhv_vop_flushinval_pages(vp, ctooff(offtoct(pos)),
|
||||
-1, FI_REMAPF_LOCKED);
|
||||
}
|
||||
|
||||
|
@ -18,8 +18,8 @@
|
||||
#ifndef __XFS_LRW_H__
|
||||
#define __XFS_LRW_H__
|
||||
|
||||
struct vnode;
|
||||
struct bhv_desc;
|
||||
struct bhv_vnode;
|
||||
struct xfs_mount;
|
||||
struct xfs_iocore;
|
||||
struct xfs_inode;
|
||||
@ -82,7 +82,7 @@ extern int xfsbdstrat(struct xfs_mount *, struct xfs_buf *);
|
||||
extern int xfs_bdstrat_cb(struct xfs_buf *);
|
||||
extern int xfs_dev_is_read_only(struct xfs_mount *, char *);
|
||||
|
||||
extern int xfs_zero_eof(struct vnode *, struct xfs_iocore *, xfs_off_t,
|
||||
extern int xfs_zero_eof(struct bhv_vnode *, struct xfs_iocore *, xfs_off_t,
|
||||
xfs_fsize_t, xfs_fsize_t);
|
||||
extern ssize_t xfs_read(struct bhv_desc *, struct kiocb *,
|
||||
const struct iovec *, unsigned int,
|
||||
|
@ -151,7 +151,7 @@ xfs_set_inodeops(
|
||||
STATIC __inline__ void
|
||||
xfs_revalidate_inode(
|
||||
xfs_mount_t *mp,
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
xfs_inode_t *ip)
|
||||
{
|
||||
struct inode *inode = vn_to_inode(vp);
|
||||
@ -206,7 +206,7 @@ xfs_revalidate_inode(
|
||||
void
|
||||
xfs_initialize_vnode(
|
||||
bhv_desc_t *bdp,
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
bhv_desc_t *inode_bhv,
|
||||
int unlock)
|
||||
{
|
||||
@ -336,7 +336,7 @@ STATIC struct inode *
|
||||
xfs_fs_alloc_inode(
|
||||
struct super_block *sb)
|
||||
{
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
|
||||
vp = kmem_zone_alloc(xfs_vnode_zone, KM_SLEEP);
|
||||
if (unlikely(!vp))
|
||||
@ -359,13 +359,13 @@ xfs_fs_inode_init_once(
|
||||
{
|
||||
if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
|
||||
SLAB_CTOR_CONSTRUCTOR)
|
||||
inode_init_once(vn_to_inode((vnode_t *)vnode));
|
||||
inode_init_once(vn_to_inode((bhv_vnode_t *)vnode));
|
||||
}
|
||||
|
||||
STATIC int
|
||||
xfs_init_zones(void)
|
||||
{
|
||||
xfs_vnode_zone = kmem_zone_init_flags(sizeof(vnode_t), "xfs_vnode_t",
|
||||
xfs_vnode_zone = kmem_zone_init_flags(sizeof(bhv_vnode_t), "xfs_vnode",
|
||||
KM_ZONE_HWALIGN | KM_ZONE_RECLAIM |
|
||||
KM_ZONE_SPREAD,
|
||||
xfs_fs_inode_init_once);
|
||||
@ -409,22 +409,17 @@ xfs_fs_write_inode(
|
||||
struct inode *inode,
|
||||
int sync)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
int error = 0, flags = FLUSH_INODE;
|
||||
|
||||
if (vp) {
|
||||
vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address);
|
||||
if (sync)
|
||||
flags |= FLUSH_SYNC;
|
||||
VOP_IFLUSH(vp, flags, error);
|
||||
if (error == EAGAIN) {
|
||||
if (sync)
|
||||
VOP_IFLUSH(vp, flags | FLUSH_LOG, error);
|
||||
else
|
||||
error = 0;
|
||||
}
|
||||
error = bhv_vop_iflush(vp, flags);
|
||||
if (error == EAGAIN)
|
||||
error = sync? bhv_vop_iflush(vp, flags | FLUSH_LOG) : 0;
|
||||
}
|
||||
|
||||
return -error;
|
||||
}
|
||||
|
||||
@ -432,8 +427,7 @@ STATIC void
|
||||
xfs_fs_clear_inode(
|
||||
struct inode *inode)
|
||||
{
|
||||
vnode_t *vp = vn_from_inode(inode);
|
||||
int error, cache;
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
|
||||
vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address);
|
||||
|
||||
@ -446,20 +440,18 @@ xfs_fs_clear_inode(
|
||||
* This can happen because xfs_iget_core calls xfs_idestroy if we
|
||||
* find an inode with di_mode == 0 but without IGET_CREATE set.
|
||||
*/
|
||||
if (vp->v_fbhv)
|
||||
VOP_INACTIVE(vp, NULL, cache);
|
||||
if (VNHEAD(vp))
|
||||
bhv_vop_inactive(vp, NULL);
|
||||
|
||||
VN_LOCK(vp);
|
||||
vp->v_flag &= ~VMODIFIED;
|
||||
VN_UNLOCK(vp, 0);
|
||||
|
||||
if (vp->v_fbhv) {
|
||||
VOP_RECLAIM(vp, error);
|
||||
if (error)
|
||||
panic("vn_purge: cannot reclaim");
|
||||
}
|
||||
if (VNHEAD(vp))
|
||||
if (bhv_vop_reclaim(vp))
|
||||
panic("%s: cannot reclaim 0x%p\n", __FUNCTION__, vp);
|
||||
|
||||
ASSERT(vp->v_fbhv == NULL);
|
||||
ASSERT(VNHEAD(vp) == NULL);
|
||||
|
||||
#ifdef XFS_VNODE_TRACE
|
||||
ktrace_free(vp->v_trace);
|
||||
@ -789,7 +781,7 @@ xfs_fs_fill_super(
|
||||
void *data,
|
||||
int silent)
|
||||
{
|
||||
vnode_t *rootvp;
|
||||
struct bhv_vnode *rootvp;
|
||||
struct bhv_vfs *vfsp = vfs_allocate(sb);
|
||||
struct xfs_mount_args *args = xfs_args_allocate(sb, silent);
|
||||
struct kstatfs statvfs;
|
||||
|
@ -105,7 +105,7 @@ struct block_device;
|
||||
|
||||
extern __uint64_t xfs_max_file_offset(unsigned int);
|
||||
|
||||
extern void xfs_initialize_vnode(bhv_desc_t *, vnode_t *, bhv_desc_t *, int);
|
||||
extern void xfs_initialize_vnode(bhv_desc_t *, bhv_vnode_t *, bhv_desc_t *, int);
|
||||
|
||||
extern void xfs_flush_inode(struct xfs_inode *);
|
||||
extern void xfs_flush_device(struct xfs_inode *);
|
||||
|
@ -104,7 +104,7 @@ vfs_mntupdate(
|
||||
int
|
||||
vfs_root(
|
||||
struct bhv_desc *bdp,
|
||||
struct vnode **vpp)
|
||||
struct bhv_vnode **vpp)
|
||||
{
|
||||
struct bhv_desc *next = bdp;
|
||||
|
||||
@ -118,7 +118,7 @@ int
|
||||
vfs_statvfs(
|
||||
struct bhv_desc *bdp,
|
||||
xfs_statfs_t *sp,
|
||||
struct vnode *vp)
|
||||
struct bhv_vnode *vp)
|
||||
{
|
||||
struct bhv_desc *next = bdp;
|
||||
|
||||
@ -145,7 +145,7 @@ vfs_sync(
|
||||
int
|
||||
vfs_vget(
|
||||
struct bhv_desc *bdp,
|
||||
struct vnode **vpp,
|
||||
struct bhv_vnode **vpp,
|
||||
struct fid *fidp)
|
||||
{
|
||||
struct bhv_desc *next = bdp;
|
||||
@ -187,7 +187,7 @@ vfs_quotactl(
|
||||
void
|
||||
vfs_init_vnode(
|
||||
struct bhv_desc *bdp,
|
||||
struct vnode *vp,
|
||||
struct bhv_vnode *vp,
|
||||
struct bhv_desc *bp,
|
||||
int unlock)
|
||||
{
|
||||
|
@ -22,9 +22,9 @@
|
||||
#include "xfs_fs.h"
|
||||
|
||||
struct bhv_vfs;
|
||||
struct bhv_vnode;
|
||||
struct fid;
|
||||
struct cred;
|
||||
struct vnode;
|
||||
struct statfs;
|
||||
struct seq_file;
|
||||
struct super_block;
|
||||
@ -53,8 +53,6 @@ typedef struct bhv_vfs {
|
||||
wait_queue_head_t vfs_wait_single_sync_task;
|
||||
} bhv_vfs_t;
|
||||
|
||||
#define vfs_fbhv vfs_bh.bh_first /* 1st on vfs behavior chain */
|
||||
|
||||
#define bhvtovfs(bdp) ( (struct bhv_vfs *)BHV_VOBJ(bdp) )
|
||||
#define bhvtovfsops(bdp) ( (struct bhv_vfsops *)BHV_OPS(bdp) )
|
||||
#define VFS_BHVHEAD(vfs) ( &(vfs)->vfs_bh )
|
||||
@ -110,14 +108,15 @@ typedef int (*vfs_showargs_t)(bhv_desc_t *, struct seq_file *);
|
||||
typedef int (*vfs_unmount_t)(bhv_desc_t *, int, struct cred *);
|
||||
typedef int (*vfs_mntupdate_t)(bhv_desc_t *, int *,
|
||||
struct xfs_mount_args *);
|
||||
typedef int (*vfs_root_t)(bhv_desc_t *, struct vnode **);
|
||||
typedef int (*vfs_statvfs_t)(bhv_desc_t *, xfs_statfs_t *, struct vnode *);
|
||||
typedef int (*vfs_root_t)(bhv_desc_t *, struct bhv_vnode **);
|
||||
typedef int (*vfs_statvfs_t)(bhv_desc_t *, xfs_statfs_t *,
|
||||
struct bhv_vnode *);
|
||||
typedef int (*vfs_sync_t)(bhv_desc_t *, int, struct cred *);
|
||||
typedef int (*vfs_vget_t)(bhv_desc_t *, struct vnode **, struct fid *);
|
||||
typedef int (*vfs_vget_t)(bhv_desc_t *, struct bhv_vnode **, struct fid *);
|
||||
typedef int (*vfs_dmapiops_t)(bhv_desc_t *, caddr_t);
|
||||
typedef int (*vfs_quotactl_t)(bhv_desc_t *, int, int, caddr_t);
|
||||
typedef void (*vfs_init_vnode_t)(bhv_desc_t *,
|
||||
struct vnode *, bhv_desc_t *, int);
|
||||
struct bhv_vnode *, bhv_desc_t *, int);
|
||||
typedef void (*vfs_force_shutdown_t)(bhv_desc_t *, int, char *, int);
|
||||
typedef void (*vfs_freeze_t)(bhv_desc_t *);
|
||||
|
||||
@ -140,26 +139,26 @@ typedef struct bhv_vfsops {
|
||||
} bhv_vfsops_t;
|
||||
|
||||
/*
|
||||
* VFS's. Operates on vfs structure pointers (starts at bhv head).
|
||||
* Virtual filesystem operations, operating from head bhv.
|
||||
*/
|
||||
#define VHEAD(v) ((v)->vfs_fbhv)
|
||||
#define bhv_vfs_mount(v, ma,cr) vfs_mount(VHEAD(v), ma,cr)
|
||||
#define bhv_vfs_parseargs(v, o,ma,f) vfs_parseargs(VHEAD(v), o,ma,f)
|
||||
#define bhv_vfs_showargs(v, m) vfs_showargs(VHEAD(v), m)
|
||||
#define bhv_vfs_unmount(v, f,cr) vfs_unmount(VHEAD(v), f,cr)
|
||||
#define bhv_vfs_mntupdate(v, fl,args) vfs_mntupdate(VHEAD(v), fl,args)
|
||||
#define bhv_vfs_root(v, vpp) vfs_root(VHEAD(v), vpp)
|
||||
#define bhv_vfs_statvfs(v, sp,vp) vfs_statvfs(VHEAD(v), sp,vp)
|
||||
#define bhv_vfs_sync(v, flag,cr) vfs_sync(VHEAD(v), flag,cr)
|
||||
#define bhv_vfs_vget(v, vpp,fidp) vfs_vget(VHEAD(v), vpp,fidp)
|
||||
#define bhv_vfs_dmapiops(v, p) vfs_dmapiops(VHEAD(v), p)
|
||||
#define bhv_vfs_quotactl(v, c,id,p) vfs_quotactl(VHEAD(v), c,id,p)
|
||||
#define bhv_vfs_init_vnode(v, vp,b,ul) vfs_init_vnode(VHEAD(v), vp,b,ul)
|
||||
#define bhv_vfs_force_shutdown(v,u,f,l) vfs_force_shutdown(VHEAD(v), u,f,l)
|
||||
#define bhv_vfs_freeze(v) vfs_freeze(VHEAD(v))
|
||||
#define VFSHEAD(v) ((v)->vfs_bh.bh_first)
|
||||
#define bhv_vfs_mount(v, ma,cr) vfs_mount(VFSHEAD(v), ma,cr)
|
||||
#define bhv_vfs_parseargs(v, o,ma,f) vfs_parseargs(VFSHEAD(v), o,ma,f)
|
||||
#define bhv_vfs_showargs(v, m) vfs_showargs(VFSHEAD(v), m)
|
||||
#define bhv_vfs_unmount(v, f,cr) vfs_unmount(VFSHEAD(v), f,cr)
|
||||
#define bhv_vfs_mntupdate(v, fl,args) vfs_mntupdate(VFSHEAD(v), fl,args)
|
||||
#define bhv_vfs_root(v, vpp) vfs_root(VFSHEAD(v), vpp)
|
||||
#define bhv_vfs_statvfs(v, sp,vp) vfs_statvfs(VFSHEAD(v), sp,vp)
|
||||
#define bhv_vfs_sync(v, flag,cr) vfs_sync(VFSHEAD(v), flag,cr)
|
||||
#define bhv_vfs_vget(v, vpp,fidp) vfs_vget(VFSHEAD(v), vpp,fidp)
|
||||
#define bhv_vfs_dmapiops(v, p) vfs_dmapiops(VFSHEAD(v), p)
|
||||
#define bhv_vfs_quotactl(v, c,id,p) vfs_quotactl(VFSHEAD(v), c,id,p)
|
||||
#define bhv_vfs_init_vnode(v, vp,b,ul) vfs_init_vnode(VFSHEAD(v), vp,b,ul)
|
||||
#define bhv_vfs_force_shutdown(v,u,f,l) vfs_force_shutdown(VFSHEAD(v), u,f,l)
|
||||
#define bhv_vfs_freeze(v) vfs_freeze(VFSHEAD(v))
|
||||
|
||||
/*
|
||||
* PVFS's. Operates on behavior descriptor pointers.
|
||||
* Virtual filesystem operations, operating from next bhv.
|
||||
*/
|
||||
#define bhv_next_vfs_mount(b, ma,cr) vfs_mount(b, ma,cr)
|
||||
#define bhv_next_vfs_parseargs(b, o,ma,f) vfs_parseargs(b, o,ma,f)
|
||||
@ -181,13 +180,13 @@ extern int vfs_parseargs(bhv_desc_t *, char *, struct xfs_mount_args *, int);
|
||||
extern int vfs_showargs(bhv_desc_t *, struct seq_file *);
|
||||
extern int vfs_unmount(bhv_desc_t *, int, struct cred *);
|
||||
extern int vfs_mntupdate(bhv_desc_t *, int *, struct xfs_mount_args *);
|
||||
extern int vfs_root(bhv_desc_t *, struct vnode **);
|
||||
extern int vfs_statvfs(bhv_desc_t *, xfs_statfs_t *, struct vnode *);
|
||||
extern int vfs_root(bhv_desc_t *, struct bhv_vnode **);
|
||||
extern int vfs_statvfs(bhv_desc_t *, xfs_statfs_t *, struct bhv_vnode *);
|
||||
extern int vfs_sync(bhv_desc_t *, int, struct cred *);
|
||||
extern int vfs_vget(bhv_desc_t *, struct vnode **, struct fid *);
|
||||
extern int vfs_vget(bhv_desc_t *, struct bhv_vnode **, struct fid *);
|
||||
extern int vfs_dmapiops(bhv_desc_t *, caddr_t);
|
||||
extern int vfs_quotactl(bhv_desc_t *, int, int, caddr_t);
|
||||
extern void vfs_init_vnode(bhv_desc_t *, struct vnode *, bhv_desc_t *, int);
|
||||
extern void vfs_init_vnode(bhv_desc_t *, struct bhv_vnode *, bhv_desc_t *, int);
|
||||
extern void vfs_force_shutdown(bhv_desc_t *, int, char *, int);
|
||||
extern void vfs_freeze(bhv_desc_t *);
|
||||
|
||||
|
@ -39,7 +39,7 @@ vn_init(void)
|
||||
|
||||
void
|
||||
vn_iowait(
|
||||
struct vnode *vp)
|
||||
bhv_vnode_t *vp)
|
||||
{
|
||||
wait_queue_head_t *wq = vptosync(vp);
|
||||
|
||||
@ -48,7 +48,7 @@ vn_iowait(
|
||||
|
||||
void
|
||||
vn_iowake(
|
||||
struct vnode *vp)
|
||||
bhv_vnode_t *vp)
|
||||
{
|
||||
if (atomic_dec_and_test(&vp->v_iocount))
|
||||
wake_up(vptosync(vp));
|
||||
@ -61,7 +61,7 @@ vn_iowake(
|
||||
*/
|
||||
void
|
||||
vn_ioerror(
|
||||
struct vnode *vp,
|
||||
bhv_vnode_t *vp,
|
||||
int error,
|
||||
char *f,
|
||||
int l)
|
||||
@ -70,11 +70,11 @@ vn_ioerror(
|
||||
bhv_vfs_force_shutdown(vp->v_vfsp, SHUTDOWN_DEVICE_REQ, f, l);
|
||||
}
|
||||
|
||||
struct vnode *
|
||||
bhv_vnode_t *
|
||||
vn_initialize(
|
||||
struct inode *inode)
|
||||
{
|
||||
struct vnode *vp = vn_from_inode(inode);
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
|
||||
XFS_STATS_INC(vn_active);
|
||||
XFS_STATS_INC(vn_alloc);
|
||||
@ -110,7 +110,7 @@ vn_initialize(
|
||||
*/
|
||||
void
|
||||
vn_revalidate_core(
|
||||
struct vnode *vp,
|
||||
bhv_vnode_t *vp,
|
||||
vattr_t *vap)
|
||||
{
|
||||
struct inode *inode = vn_to_inode(vp);
|
||||
@ -146,14 +146,14 @@ vn_revalidate_core(
|
||||
*/
|
||||
int
|
||||
__vn_revalidate(
|
||||
struct vnode *vp,
|
||||
bhv_vnode_t *vp,
|
||||
struct vattr *vattr)
|
||||
{
|
||||
int error;
|
||||
|
||||
vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address);
|
||||
vattr->va_mask = XFS_AT_STAT | XFS_AT_XFLAGS;
|
||||
VOP_GETATTR(vp, vattr, 0, NULL, error);
|
||||
error = bhv_vop_getattr(vp, vattr, 0, NULL);
|
||||
if (likely(!error)) {
|
||||
vn_revalidate_core(vp, vattr);
|
||||
VUNMODIFY(vp);
|
||||
@ -163,7 +163,7 @@ __vn_revalidate(
|
||||
|
||||
int
|
||||
vn_revalidate(
|
||||
struct vnode *vp)
|
||||
bhv_vnode_t *vp)
|
||||
{
|
||||
vattr_t vattr;
|
||||
|
||||
@ -173,9 +173,9 @@ vn_revalidate(
|
||||
/*
|
||||
* Add a reference to a referenced vnode.
|
||||
*/
|
||||
struct vnode *
|
||||
bhv_vnode_t *
|
||||
vn_hold(
|
||||
struct vnode *vp)
|
||||
bhv_vnode_t *vp)
|
||||
{
|
||||
struct inode *inode;
|
||||
|
||||
@ -208,31 +208,31 @@ vn_hold(
|
||||
* Vnode tracing code.
|
||||
*/
|
||||
void
|
||||
vn_trace_entry(vnode_t *vp, const char *func, inst_t *ra)
|
||||
vn_trace_entry(bhv_vnode_t *vp, const char *func, inst_t *ra)
|
||||
{
|
||||
KTRACE_ENTER(vp, VNODE_KTRACE_ENTRY, func, 0, ra);
|
||||
}
|
||||
|
||||
void
|
||||
vn_trace_exit(vnode_t *vp, const char *func, inst_t *ra)
|
||||
vn_trace_exit(bhv_vnode_t *vp, const char *func, inst_t *ra)
|
||||
{
|
||||
KTRACE_ENTER(vp, VNODE_KTRACE_EXIT, func, 0, ra);
|
||||
}
|
||||
|
||||
void
|
||||
vn_trace_hold(vnode_t *vp, char *file, int line, inst_t *ra)
|
||||
vn_trace_hold(bhv_vnode_t *vp, char *file, int line, inst_t *ra)
|
||||
{
|
||||
KTRACE_ENTER(vp, VNODE_KTRACE_HOLD, file, line, ra);
|
||||
}
|
||||
|
||||
void
|
||||
vn_trace_ref(vnode_t *vp, char *file, int line, inst_t *ra)
|
||||
vn_trace_ref(bhv_vnode_t *vp, char *file, int line, inst_t *ra)
|
||||
{
|
||||
KTRACE_ENTER(vp, VNODE_KTRACE_REF, file, line, ra);
|
||||
}
|
||||
|
||||
void
|
||||
vn_trace_rele(vnode_t *vp, char *file, int line, inst_t *ra)
|
||||
vn_trace_rele(bhv_vnode_t *vp, char *file, int line, inst_t *ra)
|
||||
{
|
||||
KTRACE_ENTER(vp, VNODE_KTRACE_RELE, file, line, ra);
|
||||
}
|
||||
|
@ -14,33 +14,6 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Portions Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef __XFS_VNODE_H__
|
||||
#define __XFS_VNODE_H__
|
||||
@ -51,7 +24,6 @@ struct vattr;
|
||||
struct xfs_iomap;
|
||||
struct attrlist_cursor_kern;
|
||||
|
||||
|
||||
typedef xfs_ino_t vnumber_t;
|
||||
typedef struct dentry vname_t;
|
||||
typedef bhv_head_t vn_bhv_head_t;
|
||||
@ -66,7 +38,7 @@ typedef enum vflags {
|
||||
* MP locking protocols:
|
||||
* v_flag, v_vfsp VN_LOCK/VN_UNLOCK
|
||||
*/
|
||||
typedef struct vnode {
|
||||
typedef struct bhv_vnode {
|
||||
vflags_t v_flag; /* vnode flags (see above) */
|
||||
struct bhv_vfs *v_vfsp; /* ptr to containing VFS */
|
||||
vnumber_t v_number; /* in-core vnode number */
|
||||
@ -78,7 +50,7 @@ typedef struct vnode {
|
||||
#endif
|
||||
struct inode v_inode; /* Linux inode */
|
||||
/* inode MUST be last */
|
||||
} vnode_t;
|
||||
} bhv_vnode_t;
|
||||
|
||||
#define VN_ISLNK(vp) S_ISLNK((vp)->v_inode.i_mode)
|
||||
#define VN_ISREG(vp) S_ISREG((vp)->v_inode.i_mode)
|
||||
@ -86,9 +58,6 @@ typedef struct vnode {
|
||||
#define VN_ISCHR(vp) S_ISCHR((vp)->v_inode.i_mode)
|
||||
#define VN_ISBLK(vp) S_ISBLK((vp)->v_inode.i_mode)
|
||||
|
||||
#define v_fbhv v_bh.bh_first /* first behavior */
|
||||
#define v_fops v_bh.bh_first->bd_ops /* first behavior ops */
|
||||
|
||||
#define VNODE_POSITION_BASE BHV_POSITION_BASE /* chain bottom */
|
||||
#define VNODE_POSITION_TOP BHV_POSITION_TOP /* chain top */
|
||||
#define VNODE_POSITION_INVALID BHV_POSITION_INVALID /* invalid pos. num */
|
||||
@ -110,8 +79,8 @@ typedef enum {
|
||||
/*
|
||||
* Macros for dealing with the behavior descriptor inside of the vnode.
|
||||
*/
|
||||
#define BHV_TO_VNODE(bdp) ((vnode_t *)BHV_VOBJ(bdp))
|
||||
#define BHV_TO_VNODE_NULL(bdp) ((vnode_t *)BHV_VOBJNULL(bdp))
|
||||
#define BHV_TO_VNODE(bdp) ((bhv_vnode_t *)BHV_VOBJ(bdp))
|
||||
#define BHV_TO_VNODE_NULL(bdp) ((bhv_vnode_t *)BHV_VOBJNULL(bdp))
|
||||
|
||||
#define VN_BHV_HEAD(vp) ((bhv_head_t *)(&((vp)->v_bh)))
|
||||
#define vn_bhv_head_init(bhp,name) bhv_head_init(bhp,name)
|
||||
@ -122,17 +91,17 @@ typedef enum {
|
||||
/*
|
||||
* Vnode to Linux inode mapping.
|
||||
*/
|
||||
static inline struct vnode *vn_from_inode(struct inode *inode)
|
||||
static inline struct bhv_vnode *vn_from_inode(struct inode *inode)
|
||||
{
|
||||
return (vnode_t *)list_entry(inode, vnode_t, v_inode);
|
||||
return (bhv_vnode_t *)list_entry(inode, bhv_vnode_t, v_inode);
|
||||
}
|
||||
static inline struct inode *vn_to_inode(struct vnode *vnode)
|
||||
static inline struct inode *vn_to_inode(struct bhv_vnode *vnode)
|
||||
{
|
||||
return &vnode->v_inode;
|
||||
}
|
||||
|
||||
/*
|
||||
* Values for the VOP_RWLOCK and VOP_RWUNLOCK flags parameter.
|
||||
* Values for the vop_rwlock/rwunlock flags parameter.
|
||||
*/
|
||||
typedef enum vrwlock {
|
||||
VRWLOCK_NONE,
|
||||
@ -144,7 +113,7 @@ typedef enum vrwlock {
|
||||
} vrwlock_t;
|
||||
|
||||
/*
|
||||
* Return values for VOP_INACTIVE. A return value of
|
||||
* Return values for bhv_vop_inactive. A return value of
|
||||
* VN_INACTIVE_NOCACHE implies that the file system behavior
|
||||
* has disassociated its state and bhv_desc_t from the vnode.
|
||||
*/
|
||||
@ -152,7 +121,7 @@ typedef enum vrwlock {
|
||||
#define VN_INACTIVE_NOCACHE 1
|
||||
|
||||
/*
|
||||
* Values for the cmd code given to VOP_VNODE_CHANGE.
|
||||
* Values for the cmd code given to vop_vnode_change.
|
||||
*/
|
||||
typedef enum vchange {
|
||||
VCHANGE_FLAGS_FRLOCKS = 0,
|
||||
@ -188,22 +157,22 @@ typedef int (*vop_getattr_t)(bhv_desc_t *, struct vattr *, int,
|
||||
typedef int (*vop_setattr_t)(bhv_desc_t *, struct vattr *, int,
|
||||
struct cred *);
|
||||
typedef int (*vop_access_t)(bhv_desc_t *, int, struct cred *);
|
||||
typedef int (*vop_lookup_t)(bhv_desc_t *, vname_t *, vnode_t **,
|
||||
int, vnode_t *, struct cred *);
|
||||
typedef int (*vop_lookup_t)(bhv_desc_t *, vname_t *, bhv_vnode_t **,
|
||||
int, bhv_vnode_t *, struct cred *);
|
||||
typedef int (*vop_create_t)(bhv_desc_t *, vname_t *, struct vattr *,
|
||||
vnode_t **, struct cred *);
|
||||
bhv_vnode_t **, struct cred *);
|
||||
typedef int (*vop_remove_t)(bhv_desc_t *, vname_t *, struct cred *);
|
||||
typedef int (*vop_link_t)(bhv_desc_t *, vnode_t *, vname_t *,
|
||||
struct cred *);
|
||||
typedef int (*vop_rename_t)(bhv_desc_t *, vname_t *, vnode_t *, vname_t *,
|
||||
typedef int (*vop_link_t)(bhv_desc_t *, bhv_vnode_t *, vname_t *,
|
||||
struct cred *);
|
||||
typedef int (*vop_rename_t)(bhv_desc_t *, vname_t *, bhv_vnode_t *,
|
||||
vname_t *, struct cred *);
|
||||
typedef int (*vop_mkdir_t)(bhv_desc_t *, vname_t *, struct vattr *,
|
||||
vnode_t **, struct cred *);
|
||||
bhv_vnode_t **, struct cred *);
|
||||
typedef int (*vop_rmdir_t)(bhv_desc_t *, vname_t *, struct cred *);
|
||||
typedef int (*vop_readdir_t)(bhv_desc_t *, struct uio *, struct cred *,
|
||||
int *);
|
||||
typedef int (*vop_symlink_t)(bhv_desc_t *, vname_t *, struct vattr *,
|
||||
char *, vnode_t **, struct cred *);
|
||||
char *, bhv_vnode_t **, struct cred *);
|
||||
typedef int (*vop_readlink_t)(bhv_desc_t *, struct uio *, int,
|
||||
struct cred *);
|
||||
typedef int (*vop_fsync_t)(bhv_desc_t *, int, struct cred *,
|
||||
@ -224,7 +193,7 @@ typedef int (*vop_attr_remove_t)(bhv_desc_t *, const char *,
|
||||
int, struct cred *);
|
||||
typedef int (*vop_attr_list_t)(bhv_desc_t *, char *, int, int,
|
||||
struct attrlist_cursor_kern *, struct cred *);
|
||||
typedef void (*vop_link_removed_t)(bhv_desc_t *, vnode_t *, int);
|
||||
typedef void (*vop_link_removed_t)(bhv_desc_t *, bhv_vnode_t *, int);
|
||||
typedef void (*vop_vnode_change_t)(bhv_desc_t *, vchange_t, __psint_t);
|
||||
typedef void (*vop_ptossvp_t)(bhv_desc_t *, xfs_off_t, xfs_off_t, int);
|
||||
typedef void (*vop_pflushinvalvp_t)(bhv_desc_t *, xfs_off_t, xfs_off_t, int);
|
||||
@ -233,7 +202,7 @@ typedef int (*vop_pflushvp_t)(bhv_desc_t *, xfs_off_t, xfs_off_t,
|
||||
typedef int (*vop_iflush_t)(bhv_desc_t *, int);
|
||||
|
||||
|
||||
typedef struct vnodeops {
|
||||
typedef struct bhv_vnodeops {
|
||||
bhv_position_t vn_position; /* position within behavior chain */
|
||||
vop_open_t vop_open;
|
||||
vop_close_t vop_close;
|
||||
@ -274,105 +243,80 @@ typedef struct vnodeops {
|
||||
vop_pflushvp_t vop_flush_pages;
|
||||
vop_release_t vop_release;
|
||||
vop_iflush_t vop_iflush;
|
||||
} vnodeops_t;
|
||||
} bhv_vnodeops_t;
|
||||
|
||||
/*
|
||||
* VOP's.
|
||||
* Virtual node operations, operating from head bhv.
|
||||
*/
|
||||
#define _VOP_(op, vp) (*((vnodeops_t *)(vp)->v_fops)->op)
|
||||
|
||||
#define VOP_OPEN(vp, cr, rv) \
|
||||
rv = _VOP_(vop_open, vp)((vp)->v_fbhv, cr)
|
||||
#define VOP_CLOSE(vp, f, last, cr, rv) \
|
||||
rv = _VOP_(vop_close, vp)((vp)->v_fbhv, f, last, cr)
|
||||
#define VOP_READ(vp,file,iov,segs,offset,ioflags,cr,rv) \
|
||||
rv = _VOP_(vop_read, vp)((vp)->v_fbhv,file,iov,segs,offset,ioflags,cr)
|
||||
#define VOP_WRITE(vp,file,iov,segs,offset,ioflags,cr,rv) \
|
||||
rv = _VOP_(vop_write, vp)((vp)->v_fbhv,file,iov,segs,offset,ioflags,cr)
|
||||
#define VOP_SENDFILE(vp,f,off,ioflags,cnt,act,targ,cr,rv) \
|
||||
rv = _VOP_(vop_sendfile, vp)((vp)->v_fbhv,f,off,ioflags,cnt,act,targ,cr)
|
||||
#define VOP_SPLICE_READ(vp,f,o,pipe,cnt,fl,iofl,cr,rv) \
|
||||
rv = _VOP_(vop_splice_read, vp)((vp)->v_fbhv,f,o,pipe,cnt,fl,iofl,cr)
|
||||
#define VOP_SPLICE_WRITE(vp,f,o,pipe,cnt,fl,iofl,cr,rv) \
|
||||
rv = _VOP_(vop_splice_write, vp)((vp)->v_fbhv,f,o,pipe,cnt,fl,iofl,cr)
|
||||
#define VOP_BMAP(vp,of,sz,rw,b,n,rv) \
|
||||
rv = _VOP_(vop_bmap, vp)((vp)->v_fbhv,of,sz,rw,b,n)
|
||||
#define VOP_GETATTR(vp, vap, f, cr, rv) \
|
||||
rv = _VOP_(vop_getattr, vp)((vp)->v_fbhv, vap, f, cr)
|
||||
#define VOP_SETATTR(vp, vap, f, cr, rv) \
|
||||
rv = _VOP_(vop_setattr, vp)((vp)->v_fbhv, vap, f, cr)
|
||||
#define VOP_ACCESS(vp, mode, cr, rv) \
|
||||
rv = _VOP_(vop_access, vp)((vp)->v_fbhv, mode, cr)
|
||||
#define VOP_LOOKUP(vp,d,vpp,f,rdir,cr,rv) \
|
||||
rv = _VOP_(vop_lookup, vp)((vp)->v_fbhv,d,vpp,f,rdir,cr)
|
||||
#define VOP_CREATE(dvp,d,vap,vpp,cr,rv) \
|
||||
rv = _VOP_(vop_create, dvp)((dvp)->v_fbhv,d,vap,vpp,cr)
|
||||
#define VOP_REMOVE(dvp,d,cr,rv) \
|
||||
rv = _VOP_(vop_remove, dvp)((dvp)->v_fbhv,d,cr)
|
||||
#define VOP_LINK(tdvp,fvp,d,cr,rv) \
|
||||
rv = _VOP_(vop_link, tdvp)((tdvp)->v_fbhv,fvp,d,cr)
|
||||
#define VOP_RENAME(fvp,fnm,tdvp,tnm,cr,rv) \
|
||||
rv = _VOP_(vop_rename, fvp)((fvp)->v_fbhv,fnm,tdvp,tnm,cr)
|
||||
#define VOP_MKDIR(dp,d,vap,vpp,cr,rv) \
|
||||
rv = _VOP_(vop_mkdir, dp)((dp)->v_fbhv,d,vap,vpp,cr)
|
||||
#define VOP_RMDIR(dp,d,cr,rv) \
|
||||
rv = _VOP_(vop_rmdir, dp)((dp)->v_fbhv,d,cr)
|
||||
#define VOP_READDIR(vp,uiop,cr,eofp,rv) \
|
||||
rv = _VOP_(vop_readdir, vp)((vp)->v_fbhv,uiop,cr,eofp)
|
||||
#define VOP_SYMLINK(dvp,d,vap,tnm,vpp,cr,rv) \
|
||||
rv = _VOP_(vop_symlink, dvp) ((dvp)->v_fbhv,d,vap,tnm,vpp,cr)
|
||||
#define VOP_READLINK(vp,uiop,fl,cr,rv) \
|
||||
rv = _VOP_(vop_readlink, vp)((vp)->v_fbhv,uiop,fl,cr)
|
||||
#define VOP_FSYNC(vp,f,cr,b,e,rv) \
|
||||
rv = _VOP_(vop_fsync, vp)((vp)->v_fbhv,f,cr,b,e)
|
||||
#define VOP_INACTIVE(vp, cr, rv) \
|
||||
rv = _VOP_(vop_inactive, vp)((vp)->v_fbhv, cr)
|
||||
#define VOP_RELEASE(vp, rv) \
|
||||
rv = _VOP_(vop_release, vp)((vp)->v_fbhv)
|
||||
#define VOP_FID2(vp, fidp, rv) \
|
||||
rv = _VOP_(vop_fid2, vp)((vp)->v_fbhv, fidp)
|
||||
#define VOP_RWLOCK(vp,i) \
|
||||
(void)_VOP_(vop_rwlock, vp)((vp)->v_fbhv, i)
|
||||
#define VOP_RWLOCK_TRY(vp,i) \
|
||||
_VOP_(vop_rwlock, vp)((vp)->v_fbhv, i)
|
||||
#define VOP_RWUNLOCK(vp,i) \
|
||||
(void)_VOP_(vop_rwunlock, vp)((vp)->v_fbhv, i)
|
||||
#define VOP_FRLOCK(vp,c,fl,flags,offset,fr,rv) \
|
||||
rv = _VOP_(vop_frlock, vp)((vp)->v_fbhv,c,fl,flags,offset,fr)
|
||||
#define VOP_RECLAIM(vp, rv) \
|
||||
rv = _VOP_(vop_reclaim, vp)((vp)->v_fbhv)
|
||||
#define VOP_ATTR_GET(vp, name, val, vallenp, fl, cred, rv) \
|
||||
rv = _VOP_(vop_attr_get, vp)((vp)->v_fbhv,name,val,vallenp,fl,cred)
|
||||
#define VOP_ATTR_SET(vp, name, val, vallen, fl, cred, rv) \
|
||||
rv = _VOP_(vop_attr_set, vp)((vp)->v_fbhv,name,val,vallen,fl,cred)
|
||||
#define VOP_ATTR_REMOVE(vp, name, flags, cred, rv) \
|
||||
rv = _VOP_(vop_attr_remove, vp)((vp)->v_fbhv,name,flags,cred)
|
||||
#define VOP_ATTR_LIST(vp, buf, buflen, fl, cursor, cred, rv) \
|
||||
rv = _VOP_(vop_attr_list, vp)((vp)->v_fbhv,buf,buflen,fl,cursor,cred)
|
||||
#define VOP_LINK_REMOVED(vp, dvp, linkzero) \
|
||||
(void)_VOP_(vop_link_removed, vp)((vp)->v_fbhv, dvp, linkzero)
|
||||
#define VOP_VNODE_CHANGE(vp, cmd, val) \
|
||||
(void)_VOP_(vop_vnode_change, vp)((vp)->v_fbhv,cmd,val)
|
||||
/*
|
||||
* These are page cache functions that now go thru VOPs.
|
||||
* 'last' parameter is unused and left in for IRIX compatibility
|
||||
*/
|
||||
#define VOP_TOSS_PAGES(vp, first, last, fiopt) \
|
||||
_VOP_(vop_tosspages, vp)((vp)->v_fbhv,first, last, fiopt)
|
||||
/*
|
||||
* 'last' parameter is unused and left in for IRIX compatibility
|
||||
*/
|
||||
#define VOP_FLUSHINVAL_PAGES(vp, first, last, fiopt) \
|
||||
_VOP_(vop_flushinval_pages, vp)((vp)->v_fbhv,first,last,fiopt)
|
||||
/*
|
||||
* 'last' parameter is unused and left in for IRIX compatibility
|
||||
*/
|
||||
#define VOP_FLUSH_PAGES(vp, first, last, flags, fiopt, rv) \
|
||||
rv = _VOP_(vop_flush_pages, vp)((vp)->v_fbhv,first,last,flags,fiopt)
|
||||
#define VOP_IOCTL(vp, inode, filp, fl, cmd, arg, rv) \
|
||||
rv = _VOP_(vop_ioctl, vp)((vp)->v_fbhv,inode,filp,fl,cmd,arg)
|
||||
#define VOP_IFLUSH(vp, flags, rv) \
|
||||
rv = _VOP_(vop_iflush, vp)((vp)->v_fbhv, flags)
|
||||
#define VNHEAD(vp) ((vp)->v_bh.bh_first)
|
||||
#define VOP(op, vp) (*((bhv_vnodeops_t *)VNHEAD(vp)->bd_ops)->op)
|
||||
#define bhv_vop_open(vp, cr) VOP(vop_open, vp)(VNHEAD(vp),cr)
|
||||
#define bhv_vop_close(vp, f,last,cr) VOP(vop_close, vp)(VNHEAD(vp),f,last,cr)
|
||||
#define bhv_vop_read(vp,file,iov,segs,offset,ioflags,cr) \
|
||||
VOP(vop_read, vp)(VNHEAD(vp),file,iov,segs,offset,ioflags,cr)
|
||||
#define bhv_vop_write(vp,file,iov,segs,offset,ioflags,cr) \
|
||||
VOP(vop_write, vp)(VNHEAD(vp),file,iov,segs,offset,ioflags,cr)
|
||||
#define bhv_vop_sendfile(vp,f,off,ioflags,cnt,act,targ,cr) \
|
||||
VOP(vop_sendfile, vp)(VNHEAD(vp),f,off,ioflags,cnt,act,targ,cr)
|
||||
#define bhv_vop_splice_read(vp,f,o,pipe,cnt,fl,iofl,cr) \
|
||||
VOP(vop_splice_read, vp)(VNHEAD(vp),f,o,pipe,cnt,fl,iofl,cr)
|
||||
#define bhv_vop_splice_write(vp,f,o,pipe,cnt,fl,iofl,cr) \
|
||||
VOP(vop_splice_write, vp)(VNHEAD(vp),f,o,pipe,cnt,fl,iofl,cr)
|
||||
#define bhv_vop_bmap(vp,of,sz,rw,b,n) \
|
||||
VOP(vop_bmap, vp)(VNHEAD(vp),of,sz,rw,b,n)
|
||||
#define bhv_vop_getattr(vp, vap,f,cr) \
|
||||
VOP(vop_getattr, vp)(VNHEAD(vp), vap,f,cr)
|
||||
#define bhv_vop_setattr(vp, vap,f,cr) \
|
||||
VOP(vop_setattr, vp)(VNHEAD(vp), vap,f,cr)
|
||||
#define bhv_vop_access(vp, mode,cr) VOP(vop_access, vp)(VNHEAD(vp), mode,cr)
|
||||
#define bhv_vop_lookup(vp,d,vpp,f,rdir,cr) \
|
||||
VOP(vop_lookup, vp)(VNHEAD(vp),d,vpp,f,rdir,cr)
|
||||
#define bhv_vop_create(dvp,d,vap,vpp,cr) \
|
||||
VOP(vop_create, dvp)(VNHEAD(dvp),d,vap,vpp,cr)
|
||||
#define bhv_vop_remove(dvp,d,cr) VOP(vop_remove, dvp)(VNHEAD(dvp),d,cr)
|
||||
#define bhv_vop_link(dvp,fvp,d,cr) VOP(vop_link, dvp)(VNHEAD(dvp),fvp,d,cr)
|
||||
#define bhv_vop_rename(fvp,fnm,tdvp,tnm,cr) \
|
||||
VOP(vop_rename, fvp)(VNHEAD(fvp),fnm,tdvp,tnm,cr)
|
||||
#define bhv_vop_mkdir(dp,d,vap,vpp,cr) \
|
||||
VOP(vop_mkdir, dp)(VNHEAD(dp),d,vap,vpp,cr)
|
||||
#define bhv_vop_rmdir(dp,d,cr) VOP(vop_rmdir, dp)(VNHEAD(dp),d,cr)
|
||||
#define bhv_vop_readdir(vp,uiop,cr,eofp) \
|
||||
VOP(vop_readdir, vp)(VNHEAD(vp),uiop,cr,eofp)
|
||||
#define bhv_vop_symlink(dvp,d,vap,tnm,vpp,cr) \
|
||||
VOP(vop_symlink, dvp)(VNHEAD(dvp),d,vap,tnm,vpp,cr)
|
||||
#define bhv_vop_readlink(vp,uiop,fl,cr) \
|
||||
VOP(vop_readlink, vp)(VNHEAD(vp),uiop,fl,cr)
|
||||
#define bhv_vop_fsync(vp,f,cr,b,e) VOP(vop_fsync, vp)(VNHEAD(vp),f,cr,b,e)
|
||||
#define bhv_vop_inactive(vp,cr) VOP(vop_inactive, vp)(VNHEAD(vp),cr)
|
||||
#define bhv_vop_release(vp) VOP(vop_release, vp)(VNHEAD(vp))
|
||||
#define bhv_vop_fid2(vp,fidp) VOP(vop_fid2, vp)(VNHEAD(vp),fidp)
|
||||
#define bhv_vop_rwlock(vp,i) VOP(vop_rwlock, vp)(VNHEAD(vp),i)
|
||||
#define bhv_vop_rwlock_try(vp,i) VOP(vop_rwlock, vp)(VNHEAD(vp),i)
|
||||
#define bhv_vop_rwunlock(vp,i) VOP(vop_rwunlock, vp)(VNHEAD(vp),i)
|
||||
#define bhv_vop_frlock(vp,c,fl,flags,offset,fr) \
|
||||
VOP(vop_frlock, vp)(VNHEAD(vp),c,fl,flags,offset,fr)
|
||||
#define bhv_vop_reclaim(vp) VOP(vop_reclaim, vp)(VNHEAD(vp))
|
||||
#define bhv_vop_attr_get(vp, name, val, vallenp, fl, cred) \
|
||||
VOP(vop_attr_get, vp)(VNHEAD(vp),name,val,vallenp,fl,cred)
|
||||
#define bhv_vop_attr_set(vp, name, val, vallen, fl, cred) \
|
||||
VOP(vop_attr_set, vp)(VNHEAD(vp),name,val,vallen,fl,cred)
|
||||
#define bhv_vop_attr_remove(vp, name, flags, cred) \
|
||||
VOP(vop_attr_remove, vp)(VNHEAD(vp),name,flags,cred)
|
||||
#define bhv_vop_attr_list(vp, buf, buflen, fl, cursor, cred) \
|
||||
VOP(vop_attr_list, vp)(VNHEAD(vp),buf,buflen,fl,cursor,cred)
|
||||
#define bhv_vop_link_removed(vp, dvp, linkzero) \
|
||||
VOP(vop_link_removed, vp)(VNHEAD(vp), dvp, linkzero)
|
||||
#define bhv_vop_vnode_change(vp, cmd, val) \
|
||||
VOP(vop_vnode_change, vp)(VNHEAD(vp), cmd, val)
|
||||
#define bhv_vop_toss_pages(vp, first, last, fiopt) \
|
||||
VOP(vop_tosspages, vp)(VNHEAD(vp), first, last, fiopt)
|
||||
#define bhv_vop_flushinval_pages(vp, first, last, fiopt) \
|
||||
VOP(vop_flushinval_pages, vp)(VNHEAD(vp),first,last,fiopt)
|
||||
#define bhv_vop_flush_pages(vp, first, last, flags, fiopt) \
|
||||
VOP(vop_flush_pages, vp)(VNHEAD(vp),first,last,flags,fiopt)
|
||||
#define bhv_vop_ioctl(vp, inode, filp, fl, cmd, arg) \
|
||||
VOP(vop_ioctl, vp)(VNHEAD(vp),inode,filp,fl,cmd,arg)
|
||||
#define bhv_vop_iflush(vp, flags) VOP(vop_iflush, vp)(VNHEAD(vp), flags)
|
||||
|
||||
/*
|
||||
* Flags for read/write calls - same values as IRIX
|
||||
@ -382,7 +326,7 @@ typedef struct vnodeops {
|
||||
#define IO_INVIS 0x00020 /* don't update inode timestamps */
|
||||
|
||||
/*
|
||||
* Flags for VOP_IFLUSH call
|
||||
* Flags for vop_iflush call
|
||||
*/
|
||||
#define FLUSH_SYNC 1 /* wait for flush to complete */
|
||||
#define FLUSH_INODE 2 /* flush the inode itself */
|
||||
@ -390,8 +334,7 @@ typedef struct vnodeops {
|
||||
* this inode out to disk */
|
||||
|
||||
/*
|
||||
* Flush/Invalidate options for VOP_TOSS_PAGES, VOP_FLUSHINVAL_PAGES and
|
||||
* VOP_FLUSH_PAGES.
|
||||
* Flush/Invalidate options for vop_toss/flush/flushinval_pages.
|
||||
*/
|
||||
#define FI_NONE 0 /* none */
|
||||
#define FI_REMAPF 1 /* Do a remapf prior to the operation */
|
||||
@ -497,31 +440,17 @@ typedef struct vattr {
|
||||
(VN_ISREG(vp) && ((mode) & (VSGID|(VEXEC>>3))) == VSGID)
|
||||
|
||||
extern void vn_init(void);
|
||||
extern vnode_t *vn_initialize(struct inode *);
|
||||
extern bhv_vnode_t *vn_initialize(struct inode *);
|
||||
extern int vn_revalidate(struct bhv_vnode *);
|
||||
extern int __vn_revalidate(struct bhv_vnode *, vattr_t *);
|
||||
extern void vn_revalidate_core(struct bhv_vnode *, vattr_t *);
|
||||
|
||||
/*
|
||||
* vnode_map structures _must_ match vn_epoch and vnode structure sizes.
|
||||
*/
|
||||
typedef struct vnode_map {
|
||||
bhv_vfs_t *v_vfsp;
|
||||
vnumber_t v_number; /* in-core vnode number */
|
||||
xfs_ino_t v_ino; /* inode # */
|
||||
} vmap_t;
|
||||
extern void vn_iowait(struct bhv_vnode *vp);
|
||||
extern void vn_iowake(struct bhv_vnode *vp);
|
||||
|
||||
#define VMAP(vp, vmap) {(vmap).v_vfsp = (vp)->v_vfsp, \
|
||||
(vmap).v_number = (vp)->v_number, \
|
||||
(vmap).v_ino = (vp)->v_inode.i_ino; }
|
||||
extern void vn_ioerror(struct bhv_vnode *vp, int error, char *f, int l);
|
||||
|
||||
extern int vn_revalidate(struct vnode *);
|
||||
extern int __vn_revalidate(struct vnode *, vattr_t *);
|
||||
extern void vn_revalidate_core(struct vnode *, vattr_t *);
|
||||
|
||||
extern void vn_iowait(struct vnode *vp);
|
||||
extern void vn_iowake(struct vnode *vp);
|
||||
|
||||
extern void vn_ioerror(struct vnode *vp, int error, char *f, int l);
|
||||
|
||||
static inline int vn_count(struct vnode *vp)
|
||||
static inline int vn_count(struct bhv_vnode *vp)
|
||||
{
|
||||
return atomic_read(&vn_to_inode(vp)->i_count);
|
||||
}
|
||||
@ -529,7 +458,7 @@ static inline int vn_count(struct vnode *vp)
|
||||
/*
|
||||
* Vnode reference counting functions (and macros for compatibility).
|
||||
*/
|
||||
extern vnode_t *vn_hold(struct vnode *);
|
||||
extern bhv_vnode_t *vn_hold(struct bhv_vnode *);
|
||||
|
||||
#if defined(XFS_VNODE_TRACE)
|
||||
#define VN_HOLD(vp) \
|
||||
@ -543,7 +472,7 @@ extern vnode_t *vn_hold(struct vnode *);
|
||||
#define VN_RELE(vp) (iput(vn_to_inode(vp)))
|
||||
#endif
|
||||
|
||||
static inline struct vnode *vn_grab(struct vnode *vp)
|
||||
static inline struct bhv_vnode *vn_grab(struct bhv_vnode *vp)
|
||||
{
|
||||
struct inode *inode = igrab(vn_to_inode(vp));
|
||||
return inode ? vn_from_inode(inode) : NULL;
|
||||
@ -562,14 +491,14 @@ static inline struct vnode *vn_grab(struct vnode *vp)
|
||||
#define VN_LOCK(vp) mutex_spinlock(&(vp)->v_lock)
|
||||
#define VN_UNLOCK(vp, s) mutex_spinunlock(&(vp)->v_lock, s)
|
||||
|
||||
static __inline__ void vn_flagset(struct vnode *vp, uint flag)
|
||||
static __inline__ void vn_flagset(struct bhv_vnode *vp, uint flag)
|
||||
{
|
||||
spin_lock(&vp->v_lock);
|
||||
vp->v_flag |= flag;
|
||||
spin_unlock(&vp->v_lock);
|
||||
}
|
||||
|
||||
static __inline__ uint vn_flagclr(struct vnode *vp, uint flag)
|
||||
static __inline__ uint vn_flagclr(struct bhv_vnode *vp, uint flag)
|
||||
{
|
||||
uint cleared;
|
||||
|
||||
@ -588,12 +517,12 @@ static __inline__ uint vn_flagclr(struct vnode *vp, uint flag)
|
||||
/*
|
||||
* Dealing with bad inodes
|
||||
*/
|
||||
static inline void vn_mark_bad(struct vnode *vp)
|
||||
static inline void vn_mark_bad(struct bhv_vnode *vp)
|
||||
{
|
||||
make_bad_inode(vn_to_inode(vp));
|
||||
}
|
||||
|
||||
static inline int VN_BAD(struct vnode *vp)
|
||||
static inline int VN_BAD(struct bhv_vnode *vp)
|
||||
{
|
||||
return is_bad_inode(vn_to_inode(vp));
|
||||
}
|
||||
@ -601,18 +530,18 @@ static inline int VN_BAD(struct vnode *vp)
|
||||
/*
|
||||
* Extracting atime values in various formats
|
||||
*/
|
||||
static inline void vn_atime_to_bstime(struct vnode *vp, xfs_bstime_t *bs_atime)
|
||||
static inline void vn_atime_to_bstime(bhv_vnode_t *vp, xfs_bstime_t *bs_atime)
|
||||
{
|
||||
bs_atime->tv_sec = vp->v_inode.i_atime.tv_sec;
|
||||
bs_atime->tv_nsec = vp->v_inode.i_atime.tv_nsec;
|
||||
}
|
||||
|
||||
static inline void vn_atime_to_timespec(struct vnode *vp, struct timespec *ts)
|
||||
static inline void vn_atime_to_timespec(bhv_vnode_t *vp, struct timespec *ts)
|
||||
{
|
||||
*ts = vp->v_inode.i_atime;
|
||||
}
|
||||
|
||||
static inline void vn_atime_to_time_t(struct vnode *vp, time_t *tt)
|
||||
static inline void vn_atime_to_time_t(bhv_vnode_t *vp, time_t *tt)
|
||||
{
|
||||
*tt = vp->v_inode.i_atime.tv_sec;
|
||||
}
|
||||
@ -627,7 +556,7 @@ static inline void vn_atime_to_time_t(struct vnode *vp, time_t *tt)
|
||||
#define VN_TRUNC(vp) ((vp)->v_flag & VTRUNCATED)
|
||||
|
||||
/*
|
||||
* Flags to VOP_SETATTR/VOP_GETATTR.
|
||||
* Flags to vop_setattr/getattr.
|
||||
*/
|
||||
#define ATTR_UTIME 0x01 /* non-default utime(2) request */
|
||||
#define ATTR_DMI 0x08 /* invocation from a DMI function */
|
||||
@ -637,7 +566,7 @@ static inline void vn_atime_to_time_t(struct vnode *vp, time_t *tt)
|
||||
#define ATTR_NOSIZETOK 0x400 /* Don't get the SIZE token */
|
||||
|
||||
/*
|
||||
* Flags to VOP_FSYNC and VOP_RECLAIM.
|
||||
* Flags to vop_fsync/reclaim.
|
||||
*/
|
||||
#define FSYNC_NOWAIT 0 /* asynchronous flush */
|
||||
#define FSYNC_WAIT 0x1 /* synchronous fsync or forced reclaim */
|
||||
@ -656,11 +585,11 @@ static inline void vn_atime_to_time_t(struct vnode *vp, time_t *tt)
|
||||
#define VNODE_KTRACE_REF 4
|
||||
#define VNODE_KTRACE_RELE 5
|
||||
|
||||
extern void vn_trace_entry(struct vnode *, const char *, inst_t *);
|
||||
extern void vn_trace_exit(struct vnode *, const char *, inst_t *);
|
||||
extern void vn_trace_hold(struct vnode *, char *, int, inst_t *);
|
||||
extern void vn_trace_ref(struct vnode *, char *, int, inst_t *);
|
||||
extern void vn_trace_rele(struct vnode *, char *, int, inst_t *);
|
||||
extern void vn_trace_entry(struct bhv_vnode *, const char *, inst_t *);
|
||||
extern void vn_trace_exit(struct bhv_vnode *, const char *, inst_t *);
|
||||
extern void vn_trace_hold(struct bhv_vnode *, char *, int, inst_t *);
|
||||
extern void vn_trace_ref(struct bhv_vnode *, char *, int, inst_t *);
|
||||
extern void vn_trace_rele(struct bhv_vnode *, char *, int, inst_t *);
|
||||
|
||||
#define VN_TRACE(vp) \
|
||||
vn_trace_ref(vp, __FILE__, __LINE__, (inst_t *)__return_address)
|
||||
|
@ -192,7 +192,7 @@ STATIC int
|
||||
xfs_qm_statvfs(
|
||||
struct bhv_desc *bhv,
|
||||
xfs_statfs_t *statp,
|
||||
struct vnode *vnode)
|
||||
struct bhv_vnode *vnode)
|
||||
{
|
||||
xfs_mount_t *mp;
|
||||
xfs_inode_t *ip;
|
||||
|
@ -1035,7 +1035,7 @@ xfs_qm_dqrele_all_inodes(
|
||||
{
|
||||
xfs_inode_t *ip, *topino;
|
||||
uint ireclaims;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
boolean_t vnode_refd;
|
||||
|
||||
ASSERT(mp->m_quotainfo);
|
||||
|
@ -39,15 +39,15 @@
|
||||
#include <linux/capability.h>
|
||||
#include <linux/posix_acl_xattr.h>
|
||||
|
||||
STATIC int xfs_acl_setmode(vnode_t *, xfs_acl_t *, int *);
|
||||
STATIC int xfs_acl_setmode(bhv_vnode_t *, xfs_acl_t *, int *);
|
||||
STATIC void xfs_acl_filter_mode(mode_t, xfs_acl_t *);
|
||||
STATIC void xfs_acl_get_endian(xfs_acl_t *);
|
||||
STATIC int xfs_acl_access(uid_t, gid_t, xfs_acl_t *, mode_t, cred_t *);
|
||||
STATIC int xfs_acl_invalid(xfs_acl_t *);
|
||||
STATIC void xfs_acl_sync_mode(mode_t, xfs_acl_t *);
|
||||
STATIC void xfs_acl_get_attr(vnode_t *, xfs_acl_t *, int, int, int *);
|
||||
STATIC void xfs_acl_set_attr(vnode_t *, xfs_acl_t *, int, int *);
|
||||
STATIC int xfs_acl_allow_set(vnode_t *, int);
|
||||
STATIC void xfs_acl_get_attr(bhv_vnode_t *, xfs_acl_t *, int, int, int *);
|
||||
STATIC void xfs_acl_set_attr(bhv_vnode_t *, xfs_acl_t *, int, int *);
|
||||
STATIC int xfs_acl_allow_set(bhv_vnode_t *, int);
|
||||
|
||||
kmem_zone_t *xfs_acl_zone;
|
||||
|
||||
@ -57,7 +57,7 @@ kmem_zone_t *xfs_acl_zone;
|
||||
*/
|
||||
int
|
||||
xfs_acl_vhasacl_access(
|
||||
vnode_t *vp)
|
||||
bhv_vnode_t *vp)
|
||||
{
|
||||
int error;
|
||||
|
||||
@ -70,7 +70,7 @@ xfs_acl_vhasacl_access(
|
||||
*/
|
||||
int
|
||||
xfs_acl_vhasacl_default(
|
||||
vnode_t *vp)
|
||||
bhv_vnode_t *vp)
|
||||
{
|
||||
int error;
|
||||
|
||||
@ -209,7 +209,7 @@ posix_acl_xfs_to_xattr(
|
||||
|
||||
int
|
||||
xfs_acl_vget(
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
void *acl,
|
||||
size_t size,
|
||||
int kind)
|
||||
@ -244,7 +244,7 @@ xfs_acl_vget(
|
||||
vattr_t va;
|
||||
|
||||
va.va_mask = XFS_AT_MODE;
|
||||
VOP_GETATTR(vp, &va, 0, sys_cred, error);
|
||||
error = bhv_vop_getattr(vp, &va, 0, sys_cred);
|
||||
if (error)
|
||||
goto out;
|
||||
xfs_acl_sync_mode(va.va_mode, xfs_acl);
|
||||
@ -260,7 +260,7 @@ out:
|
||||
|
||||
int
|
||||
xfs_acl_vremove(
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
int kind)
|
||||
{
|
||||
int error;
|
||||
@ -268,9 +268,9 @@ xfs_acl_vremove(
|
||||
VN_HOLD(vp);
|
||||
error = xfs_acl_allow_set(vp, kind);
|
||||
if (!error) {
|
||||
VOP_ATTR_REMOVE(vp, kind == _ACL_TYPE_DEFAULT?
|
||||
SGI_ACL_DEFAULT: SGI_ACL_FILE,
|
||||
ATTR_ROOT, sys_cred, error);
|
||||
error = bhv_vop_attr_remove(vp, kind == _ACL_TYPE_DEFAULT?
|
||||
SGI_ACL_DEFAULT: SGI_ACL_FILE,
|
||||
ATTR_ROOT, sys_cred);
|
||||
if (error == ENOATTR)
|
||||
error = 0; /* 'scool */
|
||||
}
|
||||
@ -280,7 +280,7 @@ xfs_acl_vremove(
|
||||
|
||||
int
|
||||
xfs_acl_vset(
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
void *acl,
|
||||
size_t size,
|
||||
int kind)
|
||||
@ -370,7 +370,7 @@ xfs_acl_iaccess(
|
||||
|
||||
STATIC int
|
||||
xfs_acl_allow_set(
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
int kind)
|
||||
{
|
||||
vattr_t va;
|
||||
@ -383,7 +383,7 @@ xfs_acl_allow_set(
|
||||
if (vp->v_vfsp->vfs_flag & VFS_RDONLY)
|
||||
return EROFS;
|
||||
va.va_mask = XFS_AT_UID;
|
||||
VOP_GETATTR(vp, &va, 0, NULL, error);
|
||||
error = bhv_vop_getattr(vp, &va, 0, NULL);
|
||||
if (error)
|
||||
return error;
|
||||
if (va.va_uid != current->fsuid && !capable(CAP_FOWNER))
|
||||
@ -606,7 +606,7 @@ xfs_acl_get_endian(
|
||||
*/
|
||||
STATIC void
|
||||
xfs_acl_get_attr(
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
xfs_acl_t *aclp,
|
||||
int kind,
|
||||
int flags,
|
||||
@ -616,9 +616,9 @@ xfs_acl_get_attr(
|
||||
|
||||
ASSERT((flags & ATTR_KERNOVAL) ? (aclp == NULL) : 1);
|
||||
flags |= ATTR_ROOT;
|
||||
VOP_ATTR_GET(vp,
|
||||
kind == _ACL_TYPE_ACCESS ? SGI_ACL_FILE : SGI_ACL_DEFAULT,
|
||||
(char *)aclp, &len, flags, sys_cred, *error);
|
||||
*error = bhv_vop_attr_get(vp, kind == _ACL_TYPE_ACCESS ?
|
||||
SGI_ACL_FILE : SGI_ACL_DEFAULT,
|
||||
(char *)aclp, &len, flags, sys_cred);
|
||||
if (*error || (flags & ATTR_KERNOVAL))
|
||||
return;
|
||||
xfs_acl_get_endian(aclp);
|
||||
@ -629,7 +629,7 @@ xfs_acl_get_attr(
|
||||
*/
|
||||
STATIC void
|
||||
xfs_acl_set_attr(
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
xfs_acl_t *aclp,
|
||||
int kind,
|
||||
int *error)
|
||||
@ -654,15 +654,15 @@ xfs_acl_set_attr(
|
||||
INT_SET(newace->ae_perm, ARCH_CONVERT, ace->ae_perm);
|
||||
}
|
||||
INT_SET(newacl->acl_cnt, ARCH_CONVERT, aclp->acl_cnt);
|
||||
VOP_ATTR_SET(vp,
|
||||
kind == _ACL_TYPE_ACCESS ? SGI_ACL_FILE: SGI_ACL_DEFAULT,
|
||||
(char *)newacl, len, ATTR_ROOT, sys_cred, *error);
|
||||
*error = bhv_vop_attr_set(vp, kind == _ACL_TYPE_ACCESS ?
|
||||
SGI_ACL_FILE: SGI_ACL_DEFAULT,
|
||||
(char *)newacl, len, ATTR_ROOT, sys_cred);
|
||||
_ACL_FREE(newacl);
|
||||
}
|
||||
|
||||
int
|
||||
xfs_acl_vtoacl(
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
xfs_acl_t *access_acl,
|
||||
xfs_acl_t *default_acl)
|
||||
{
|
||||
@ -678,7 +678,7 @@ xfs_acl_vtoacl(
|
||||
if (!error) {
|
||||
/* Got the ACL, need the mode... */
|
||||
va.va_mask = XFS_AT_MODE;
|
||||
VOP_GETATTR(vp, &va, 0, sys_cred, error);
|
||||
error = bhv_vop_getattr(vp, &va, 0, sys_cred);
|
||||
}
|
||||
|
||||
if (error)
|
||||
@ -701,7 +701,7 @@ xfs_acl_vtoacl(
|
||||
*/
|
||||
int
|
||||
xfs_acl_inherit(
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
vattr_t *vap,
|
||||
xfs_acl_t *pdaclp)
|
||||
{
|
||||
@ -757,7 +757,7 @@ xfs_acl_inherit(
|
||||
*/
|
||||
STATIC int
|
||||
xfs_acl_setmode(
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
xfs_acl_t *acl,
|
||||
int *basicperms)
|
||||
{
|
||||
@ -776,7 +776,7 @@ xfs_acl_setmode(
|
||||
* mode. The m:: bits take precedence over the g:: bits.
|
||||
*/
|
||||
va.va_mask = XFS_AT_MODE;
|
||||
VOP_GETATTR(vp, &va, 0, sys_cred, error);
|
||||
error = bhv_vop_getattr(vp, &va, 0, sys_cred);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
@ -810,8 +810,7 @@ xfs_acl_setmode(
|
||||
if (gap && nomask)
|
||||
va.va_mode |= gap->ae_perm << 3;
|
||||
|
||||
VOP_SETATTR(vp, &va, 0, sys_cred, error);
|
||||
return error;
|
||||
return bhv_vop_setattr(vp, &va, 0, sys_cred);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -50,7 +50,7 @@ typedef struct xfs_acl {
|
||||
#ifdef CONFIG_XFS_POSIX_ACL
|
||||
|
||||
struct vattr;
|
||||
struct vnode;
|
||||
struct bhv_vnode;
|
||||
struct xfs_inode;
|
||||
|
||||
extern struct kmem_zone *xfs_acl_zone;
|
||||
@ -58,14 +58,14 @@ extern struct kmem_zone *xfs_acl_zone;
|
||||
(zone) = kmem_zone_init(sizeof(xfs_acl_t), (name))
|
||||
#define xfs_acl_zone_destroy(zone) kmem_zone_destroy(zone)
|
||||
|
||||
extern int xfs_acl_inherit(struct vnode *, struct vattr *, xfs_acl_t *);
|
||||
extern int xfs_acl_inherit(struct bhv_vnode *, struct vattr *, xfs_acl_t *);
|
||||
extern int xfs_acl_iaccess(struct xfs_inode *, mode_t, cred_t *);
|
||||
extern int xfs_acl_vtoacl(struct vnode *, xfs_acl_t *, xfs_acl_t *);
|
||||
extern int xfs_acl_vhasacl_access(struct vnode *);
|
||||
extern int xfs_acl_vhasacl_default(struct vnode *);
|
||||
extern int xfs_acl_vset(struct vnode *, void *, size_t, int);
|
||||
extern int xfs_acl_vget(struct vnode *, void *, size_t, int);
|
||||
extern int xfs_acl_vremove(struct vnode *vp, int);
|
||||
extern int xfs_acl_vtoacl(struct bhv_vnode *, xfs_acl_t *, xfs_acl_t *);
|
||||
extern int xfs_acl_vhasacl_access(struct bhv_vnode *);
|
||||
extern int xfs_acl_vhasacl_default(struct bhv_vnode *);
|
||||
extern int xfs_acl_vset(struct bhv_vnode *, void *, size_t, int);
|
||||
extern int xfs_acl_vget(struct bhv_vnode *, void *, size_t, int);
|
||||
extern int xfs_acl_vremove(struct bhv_vnode *, int);
|
||||
|
||||
#define _ACL_TYPE_ACCESS 1
|
||||
#define _ACL_TYPE_DEFAULT 2
|
||||
|
@ -2324,56 +2324,56 @@ xfs_attr_trace_enter(int type, char *where,
|
||||
|
||||
STATIC int
|
||||
posix_acl_access_set(
|
||||
vnode_t *vp, char *name, void *data, size_t size, int xflags)
|
||||
bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags)
|
||||
{
|
||||
return xfs_acl_vset(vp, data, size, _ACL_TYPE_ACCESS);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
posix_acl_access_remove(
|
||||
struct vnode *vp, char *name, int xflags)
|
||||
bhv_vnode_t *vp, char *name, int xflags)
|
||||
{
|
||||
return xfs_acl_vremove(vp, _ACL_TYPE_ACCESS);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
posix_acl_access_get(
|
||||
vnode_t *vp, char *name, void *data, size_t size, int xflags)
|
||||
bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags)
|
||||
{
|
||||
return xfs_acl_vget(vp, data, size, _ACL_TYPE_ACCESS);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
posix_acl_access_exists(
|
||||
vnode_t *vp)
|
||||
bhv_vnode_t *vp)
|
||||
{
|
||||
return xfs_acl_vhasacl_access(vp);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
posix_acl_default_set(
|
||||
vnode_t *vp, char *name, void *data, size_t size, int xflags)
|
||||
bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags)
|
||||
{
|
||||
return xfs_acl_vset(vp, data, size, _ACL_TYPE_DEFAULT);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
posix_acl_default_get(
|
||||
vnode_t *vp, char *name, void *data, size_t size, int xflags)
|
||||
bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags)
|
||||
{
|
||||
return xfs_acl_vget(vp, data, size, _ACL_TYPE_DEFAULT);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
posix_acl_default_remove(
|
||||
struct vnode *vp, char *name, int xflags)
|
||||
bhv_vnode_t *vp, char *name, int xflags)
|
||||
{
|
||||
return xfs_acl_vremove(vp, _ACL_TYPE_DEFAULT);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
posix_acl_default_exists(
|
||||
vnode_t *vp)
|
||||
bhv_vnode_t *vp)
|
||||
{
|
||||
return xfs_acl_vhasacl_default(vp);
|
||||
}
|
||||
@ -2406,21 +2406,18 @@ STATIC struct attrnames *attr_system_names[] =
|
||||
|
||||
STATIC int
|
||||
attr_generic_set(
|
||||
struct vnode *vp, char *name, void *data, size_t size, int xflags)
|
||||
bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags)
|
||||
{
|
||||
int error;
|
||||
|
||||
VOP_ATTR_SET(vp, name, data, size, xflags, NULL, error);
|
||||
return -error;
|
||||
return -bhv_vop_attr_set(vp, name, data, size, xflags, NULL);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
attr_generic_get(
|
||||
struct vnode *vp, char *name, void *data, size_t size, int xflags)
|
||||
bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags)
|
||||
{
|
||||
int error, asize = size;
|
||||
|
||||
VOP_ATTR_GET(vp, name, data, &asize, xflags, NULL, error);
|
||||
error = bhv_vop_attr_get(vp, name, data, &asize, xflags, NULL);
|
||||
if (!error)
|
||||
return asize;
|
||||
return -error;
|
||||
@ -2428,12 +2425,9 @@ attr_generic_get(
|
||||
|
||||
STATIC int
|
||||
attr_generic_remove(
|
||||
struct vnode *vp, char *name, int xflags)
|
||||
bhv_vnode_t *vp, char *name, int xflags)
|
||||
{
|
||||
int error;
|
||||
|
||||
VOP_ATTR_REMOVE(vp, name, xflags, NULL, error);
|
||||
return -error;
|
||||
return -bhv_vop_attr_remove(vp, name, xflags, NULL);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
@ -2461,7 +2455,7 @@ attr_generic_listadd(
|
||||
|
||||
STATIC int
|
||||
attr_system_list(
|
||||
struct vnode *vp,
|
||||
bhv_vnode_t *vp,
|
||||
void *data,
|
||||
size_t size,
|
||||
ssize_t *result)
|
||||
@ -2483,12 +2477,12 @@ attr_system_list(
|
||||
|
||||
int
|
||||
attr_generic_list(
|
||||
struct vnode *vp, void *data, size_t size, int xflags, ssize_t *result)
|
||||
bhv_vnode_t *vp, void *data, size_t size, int xflags, ssize_t *result)
|
||||
{
|
||||
attrlist_cursor_kern_t cursor = { 0 };
|
||||
int error;
|
||||
|
||||
VOP_ATTR_LIST(vp, data, size, xflags, &cursor, NULL, error);
|
||||
error = bhv_vop_attr_list(vp, data, size, xflags, &cursor, NULL);
|
||||
if (error > 0)
|
||||
return -error;
|
||||
*result = -error;
|
||||
@ -2516,7 +2510,7 @@ attr_lookup_namespace(
|
||||
*/
|
||||
STATIC int
|
||||
attr_user_capable(
|
||||
struct vnode *vp,
|
||||
bhv_vnode_t *vp,
|
||||
cred_t *cred)
|
||||
{
|
||||
struct inode *inode = vn_to_inode(vp);
|
||||
@ -2534,7 +2528,7 @@ attr_user_capable(
|
||||
|
||||
STATIC int
|
||||
attr_trusted_capable(
|
||||
struct vnode *vp,
|
||||
bhv_vnode_t *vp,
|
||||
cred_t *cred)
|
||||
{
|
||||
struct inode *inode = vn_to_inode(vp);
|
||||
@ -2548,7 +2542,7 @@ attr_trusted_capable(
|
||||
|
||||
STATIC int
|
||||
attr_secure_capable(
|
||||
struct vnode *vp,
|
||||
bhv_vnode_t *vp,
|
||||
cred_t *cred)
|
||||
{
|
||||
return -ENOSECURITY;
|
||||
@ -2556,7 +2550,7 @@ attr_secure_capable(
|
||||
|
||||
STATIC int
|
||||
attr_system_set(
|
||||
struct vnode *vp, char *name, void *data, size_t size, int xflags)
|
||||
bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags)
|
||||
{
|
||||
attrnames_t *namesp;
|
||||
int error;
|
||||
@ -2575,7 +2569,7 @@ attr_system_set(
|
||||
|
||||
STATIC int
|
||||
attr_system_get(
|
||||
struct vnode *vp, char *name, void *data, size_t size, int xflags)
|
||||
bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags)
|
||||
{
|
||||
attrnames_t *namesp;
|
||||
|
||||
@ -2587,7 +2581,7 @@ attr_system_get(
|
||||
|
||||
STATIC int
|
||||
attr_system_remove(
|
||||
struct vnode *vp, char *name, int xflags)
|
||||
bhv_vnode_t *vp, char *name, int xflags)
|
||||
{
|
||||
attrnames_t *namesp;
|
||||
|
||||
|
@ -36,13 +36,13 @@
|
||||
*========================================================================*/
|
||||
|
||||
struct cred;
|
||||
struct vnode;
|
||||
struct bhv_vnode;
|
||||
|
||||
typedef int (*attrset_t)(struct vnode *, char *, void *, size_t, int);
|
||||
typedef int (*attrget_t)(struct vnode *, char *, void *, size_t, int);
|
||||
typedef int (*attrremove_t)(struct vnode *, char *, int);
|
||||
typedef int (*attrexists_t)(struct vnode *);
|
||||
typedef int (*attrcapable_t)(struct vnode *, struct cred *);
|
||||
typedef int (*attrset_t)(struct bhv_vnode *, char *, void *, size_t, int);
|
||||
typedef int (*attrget_t)(struct bhv_vnode *, char *, void *, size_t, int);
|
||||
typedef int (*attrremove_t)(struct bhv_vnode *, char *, int);
|
||||
typedef int (*attrexists_t)(struct bhv_vnode *);
|
||||
typedef int (*attrcapable_t)(struct bhv_vnode *, struct cred *);
|
||||
|
||||
typedef struct attrnames {
|
||||
char * attr_name;
|
||||
@ -63,7 +63,7 @@ extern struct attrnames attr_trusted;
|
||||
extern struct attrnames *attr_namespaces[ATTR_NAMECOUNT];
|
||||
|
||||
extern attrnames_t *attr_lookup_namespace(char *, attrnames_t **, int);
|
||||
extern int attr_generic_list(struct vnode *, void *, size_t, int, ssize_t *);
|
||||
extern int attr_generic_list(struct bhv_vnode *, void *, size_t, int, ssize_t *);
|
||||
|
||||
#define ATTR_DONTFOLLOW 0x0001 /* -- unused, from IRIX -- */
|
||||
#define ATTR_ROOT 0x0002 /* use attrs in root (trusted) namespace */
|
||||
|
@ -5759,7 +5759,7 @@ xfs_getbmap(
|
||||
__int64_t fixlen; /* length for -1 case */
|
||||
int i; /* extent number */
|
||||
xfs_inode_t *ip; /* xfs incore inode pointer */
|
||||
vnode_t *vp; /* corresponding vnode */
|
||||
bhv_vnode_t *vp; /* corresponding vnode */
|
||||
int lock; /* lock state */
|
||||
xfs_bmbt_irec_t *map; /* buffer for user's data */
|
||||
xfs_mount_t *mp; /* file system mount point */
|
||||
@ -5856,7 +5856,7 @@ xfs_getbmap(
|
||||
|
||||
if (whichfork == XFS_DATA_FORK && ip->i_delayed_blks) {
|
||||
/* xfs_fsize_t last_byte = xfs_file_last_byte(ip); */
|
||||
VOP_FLUSH_PAGES(vp, (xfs_off_t)0, -1, 0, FI_REMAPF, error);
|
||||
error = bhv_vop_flush_pages(vp, (xfs_off_t)0, -1, 0, FI_REMAPF);
|
||||
}
|
||||
|
||||
ASSERT(whichfork == XFS_ATTR_FORK || ip->i_delayed_blks == 0);
|
||||
|
@ -49,12 +49,12 @@ typedef struct xfs_cap_set {
|
||||
|
||||
#include <linux/posix_cap_xattr.h>
|
||||
|
||||
struct vnode;
|
||||
struct bhv_vnode;
|
||||
|
||||
extern int xfs_cap_vhascap(struct vnode *);
|
||||
extern int xfs_cap_vset(struct vnode *, void *, size_t);
|
||||
extern int xfs_cap_vget(struct vnode *, void *, size_t);
|
||||
extern int xfs_cap_vremove(struct vnode *vp);
|
||||
extern int xfs_cap_vhascap(struct bhv_vnode *);
|
||||
extern int xfs_cap_vset(struct bhv_vnode *, void *, size_t);
|
||||
extern int xfs_cap_vget(struct bhv_vnode *, void *, size_t);
|
||||
extern int xfs_cap_vremove(struct bhv_vnode *);
|
||||
|
||||
#define _CAP_EXISTS xfs_cap_vhascap
|
||||
|
||||
|
@ -57,7 +57,7 @@ xfs_swapext(
|
||||
xfs_inode_t *ip=NULL, *tip=NULL;
|
||||
xfs_mount_t *mp;
|
||||
struct file *fp = NULL, *tfp = NULL;
|
||||
vnode_t *vp, *tvp;
|
||||
bhv_vnode_t *vp, *tvp;
|
||||
int error = 0;
|
||||
|
||||
sxp = kmem_alloc(sizeof(xfs_swapext_t), KM_MAYFAIL);
|
||||
@ -137,7 +137,7 @@ xfs_swap_extents(
|
||||
xfs_inode_t *ips[2];
|
||||
xfs_trans_t *tp;
|
||||
xfs_bstat_t *sbp = &sxp->sx_stat;
|
||||
vnode_t *vp, *tvp;
|
||||
bhv_vnode_t *vp, *tvp;
|
||||
xfs_ifork_t *tempifp, *ifp, *tifp;
|
||||
int ilf_fields, tilf_fields;
|
||||
static uint lock_flags = XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL;
|
||||
@ -202,7 +202,7 @@ xfs_swap_extents(
|
||||
|
||||
if (VN_CACHED(tvp) != 0) {
|
||||
xfs_inval_cached_trace(&tip->i_iocore, 0, -1, 0, -1);
|
||||
VOP_FLUSHINVAL_PAGES(tvp, 0, -1, FI_REMAPF_LOCKED);
|
||||
bhv_vop_flushinval_pages(tvp, 0, -1, FI_REMAPF_LOCKED);
|
||||
}
|
||||
|
||||
/* Verify O_DIRECT for ftmp */
|
||||
@ -247,7 +247,7 @@ xfs_swap_extents(
|
||||
/* We need to fail if the file is memory mapped. Once we have tossed
|
||||
* all existing pages, the page fault will have no option
|
||||
* but to go to the filesystem for pages. By making the page fault call
|
||||
* VOP_READ (or write in the case of autogrow) they block on the iolock
|
||||
* vop_read (or write in the case of autogrow) they block on the iolock
|
||||
* until we have switched the extents.
|
||||
*/
|
||||
if (VN_MAPPED(vp)) {
|
||||
@ -266,7 +266,7 @@ xfs_swap_extents(
|
||||
* fields change.
|
||||
*/
|
||||
|
||||
VOP_TOSS_PAGES(vp, 0, -1, FI_REMAPF);
|
||||
bhv_vop_toss_pages(vp, 0, -1, FI_REMAPF);
|
||||
|
||||
tp = xfs_trans_alloc(mp, XFS_TRANS_SWAPEXT);
|
||||
if ((error = xfs_trans_reserve(tp, 0,
|
||||
|
@ -186,7 +186,7 @@ xfs_ihash_promote(
|
||||
*/
|
||||
STATIC int
|
||||
xfs_iget_core(
|
||||
vnode_t *vp,
|
||||
bhv_vnode_t *vp,
|
||||
xfs_mount_t *mp,
|
||||
xfs_trans_t *tp,
|
||||
xfs_ino_t ino,
|
||||
@ -198,7 +198,7 @@ xfs_iget_core(
|
||||
xfs_ihash_t *ih;
|
||||
xfs_inode_t *ip;
|
||||
xfs_inode_t *iq;
|
||||
vnode_t *inode_vp;
|
||||
bhv_vnode_t *inode_vp;
|
||||
ulong version;
|
||||
int error;
|
||||
/* REFERENCED */
|
||||
@ -489,7 +489,7 @@ xfs_iget(
|
||||
xfs_daddr_t bno)
|
||||
{
|
||||
struct inode *inode;
|
||||
vnode_t *vp = NULL;
|
||||
bhv_vnode_t *vp = NULL;
|
||||
int error;
|
||||
|
||||
XFS_STATS_INC(xs_ig_attempts);
|
||||
@ -543,7 +543,7 @@ retry:
|
||||
void
|
||||
xfs_inode_lock_init(
|
||||
xfs_inode_t *ip,
|
||||
vnode_t *vp)
|
||||
bhv_vnode_t *vp)
|
||||
{
|
||||
mrlock_init(&ip->i_lock, MRLOCK_ALLOW_EQUAL_PRI|MRLOCK_BARRIER,
|
||||
"xfsino", (long)vp->v_number);
|
||||
@ -603,12 +603,10 @@ void
|
||||
xfs_iput(xfs_inode_t *ip,
|
||||
uint lock_flags)
|
||||
{
|
||||
vnode_t *vp = XFS_ITOV(ip);
|
||||
bhv_vnode_t *vp = XFS_ITOV(ip);
|
||||
|
||||
vn_trace_entry(vp, "xfs_iput", (inst_t *)__return_address);
|
||||
|
||||
xfs_iunlock(ip, lock_flags);
|
||||
|
||||
VN_RELE(vp);
|
||||
}
|
||||
|
||||
@ -619,7 +617,7 @@ void
|
||||
xfs_iput_new(xfs_inode_t *ip,
|
||||
uint lock_flags)
|
||||
{
|
||||
vnode_t *vp = XFS_ITOV(ip);
|
||||
bhv_vnode_t *vp = XFS_ITOV(ip);
|
||||
struct inode *inode = vn_to_inode(vp);
|
||||
|
||||
vn_trace_entry(vp, "xfs_iput_new", (inst_t *)__return_address);
|
||||
@ -645,7 +643,7 @@ xfs_iput_new(xfs_inode_t *ip,
|
||||
void
|
||||
xfs_ireclaim(xfs_inode_t *ip)
|
||||
{
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
|
||||
/*
|
||||
* Remove from old hash list and mount list.
|
||||
|
@ -1086,7 +1086,7 @@ xfs_ialloc(
|
||||
{
|
||||
xfs_ino_t ino;
|
||||
xfs_inode_t *ip;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
uint flags;
|
||||
int error;
|
||||
|
||||
@ -1427,7 +1427,7 @@ xfs_itruncate_start(
|
||||
xfs_fsize_t last_byte;
|
||||
xfs_off_t toss_start;
|
||||
xfs_mount_t *mp;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
|
||||
ASSERT(ismrlocked(&ip->i_iolock, MR_UPDATE) != 0);
|
||||
ASSERT((new_size == 0) || (new_size <= ip->i_d.di_size));
|
||||
@ -1440,9 +1440,9 @@ xfs_itruncate_start(
|
||||
vn_iowait(vp); /* wait for the completion of any pending DIOs */
|
||||
|
||||
/*
|
||||
* Call VOP_TOSS_PAGES() or VOP_FLUSHINVAL_PAGES() to get rid of pages and buffers
|
||||
* Call toss_pages or flushinval_pages to get rid of pages
|
||||
* overlapping the region being removed. We have to use
|
||||
* the less efficient VOP_FLUSHINVAL_PAGES() in the case that the
|
||||
* the less efficient flushinval_pages in the case that the
|
||||
* caller may not be able to finish the truncate without
|
||||
* dropping the inode's I/O lock. Make sure
|
||||
* to catch any pages brought in by buffers overlapping
|
||||
@ -1451,10 +1451,10 @@ xfs_itruncate_start(
|
||||
* so that we don't toss things on the same block as
|
||||
* new_size but before it.
|
||||
*
|
||||
* Before calling VOP_TOSS_PAGES() or VOP_FLUSHINVAL_PAGES(), make sure to
|
||||
* Before calling toss_page or flushinval_pages, make sure to
|
||||
* call remapf() over the same region if the file is mapped.
|
||||
* This frees up mapped file references to the pages in the
|
||||
* given range and for the VOP_FLUSHINVAL_PAGES() case it ensures
|
||||
* given range and for the flushinval_pages case it ensures
|
||||
* that we get the latest mapped changes flushed out.
|
||||
*/
|
||||
toss_start = XFS_B_TO_FSB(mp, (xfs_ufsize_t)new_size);
|
||||
@ -1472,9 +1472,9 @@ xfs_itruncate_start(
|
||||
last_byte);
|
||||
if (last_byte > toss_start) {
|
||||
if (flags & XFS_ITRUNC_DEFINITE) {
|
||||
VOP_TOSS_PAGES(vp, toss_start, -1, FI_REMAPF_LOCKED);
|
||||
bhv_vop_toss_pages(vp, toss_start, -1, FI_REMAPF_LOCKED);
|
||||
} else {
|
||||
VOP_FLUSHINVAL_PAGES(vp, toss_start, -1, FI_REMAPF_LOCKED);
|
||||
bhv_vop_flushinval_pages(vp, toss_start, -1, FI_REMAPF_LOCKED);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2752,7 +2752,7 @@ xfs_iunpin(
|
||||
* the inode to become unpinned.
|
||||
*/
|
||||
if (!(ip->i_flags & (XFS_IRECLAIM|XFS_IRECLAIMABLE))) {
|
||||
vnode_t *vp = XFS_ITOV_NULL(ip);
|
||||
bhv_vnode_t *vp = XFS_ITOV_NULL(ip);
|
||||
|
||||
/* make sync come back and flush this inode */
|
||||
if (vp) {
|
||||
@ -3512,7 +3512,7 @@ xfs_iflush_all(
|
||||
xfs_mount_t *mp)
|
||||
{
|
||||
xfs_inode_t *ip;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
|
||||
again:
|
||||
XFS_MOUNT_ILOCK(mp);
|
||||
|
@ -102,9 +102,9 @@ typedef struct xfs_ifork {
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct bhv_desc;
|
||||
struct bhv_vnode;
|
||||
struct cred;
|
||||
struct ktrace;
|
||||
struct vnode;
|
||||
struct xfs_buf;
|
||||
struct xfs_bmap_free;
|
||||
struct xfs_bmbt_irec;
|
||||
@ -400,7 +400,7 @@ void xfs_chash_init(struct xfs_mount *);
|
||||
void xfs_chash_free(struct xfs_mount *);
|
||||
xfs_inode_t *xfs_inode_incore(struct xfs_mount *, xfs_ino_t,
|
||||
struct xfs_trans *);
|
||||
void xfs_inode_lock_init(xfs_inode_t *, struct vnode *);
|
||||
void xfs_inode_lock_init(xfs_inode_t *, struct bhv_vnode *);
|
||||
int xfs_iget(struct xfs_mount *, struct xfs_trans *, xfs_ino_t,
|
||||
uint, uint, xfs_inode_t **, xfs_daddr_t);
|
||||
void xfs_iput(xfs_inode_t *, uint);
|
||||
@ -461,7 +461,7 @@ void xfs_ichgtime(xfs_inode_t *, int);
|
||||
xfs_fsize_t xfs_file_last_byte(xfs_inode_t *);
|
||||
void xfs_lock_inodes(xfs_inode_t **, int, int, uint);
|
||||
|
||||
xfs_inode_t *xfs_vtoi(struct vnode *vp);
|
||||
xfs_inode_t *xfs_vtoi(struct bhv_vnode *vp);
|
||||
|
||||
void xfs_synchronize_atime(xfs_inode_t *);
|
||||
|
||||
|
@ -51,7 +51,7 @@ xfs_bulkstat_one_iget(
|
||||
{
|
||||
xfs_dinode_core_t *dic; /* dinode core info pointer */
|
||||
xfs_inode_t *ip; /* incore inode pointer */
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
int error;
|
||||
|
||||
error = xfs_iget(mp, NULL, ino, 0, XFS_ILOCK_SHARED, &ip, bno);
|
||||
|
@ -658,7 +658,7 @@ xfs_mountfs(
|
||||
xfs_buf_t *bp;
|
||||
xfs_sb_t *sbp = &(mp->m_sb);
|
||||
xfs_inode_t *rip;
|
||||
vnode_t *rvp = NULL;
|
||||
bhv_vnode_t *rvp = NULL;
|
||||
int readio_log, writeio_log;
|
||||
xfs_daddr_t d;
|
||||
__uint64_t ret64;
|
||||
|
@ -54,7 +54,7 @@ typedef struct xfs_trans_reservations {
|
||||
struct cred;
|
||||
struct log;
|
||||
struct bhv_vfs;
|
||||
struct vnode;
|
||||
struct bhv_vnode;
|
||||
struct xfs_mount_args;
|
||||
struct xfs_ihash;
|
||||
struct xfs_chash;
|
||||
@ -67,7 +67,7 @@ struct xfs_extdelta;
|
||||
struct xfs_swapext;
|
||||
|
||||
extern struct bhv_vfsops xfs_vfsops;
|
||||
extern struct vnodeops xfs_vnodeops;
|
||||
extern struct bhv_vnodeops xfs_vnodeops;
|
||||
|
||||
#define AIL_LOCK_T lock_t
|
||||
#define AIL_LOCKINIT(x,y) spinlock_init(x,y)
|
||||
@ -80,15 +80,15 @@ extern struct vnodeops xfs_vnodeops;
|
||||
* Prototypes and functions for the Data Migration subsystem.
|
||||
*/
|
||||
|
||||
typedef int (*xfs_send_data_t)(int, struct vnode *,
|
||||
typedef int (*xfs_send_data_t)(int, struct bhv_vnode *,
|
||||
xfs_off_t, size_t, int, vrwlock_t *);
|
||||
typedef int (*xfs_send_mmap_t)(struct vm_area_struct *, uint);
|
||||
typedef int (*xfs_send_destroy_t)(struct vnode *, dm_right_t);
|
||||
typedef int (*xfs_send_destroy_t)(struct bhv_vnode *, dm_right_t);
|
||||
typedef int (*xfs_send_namesp_t)(dm_eventtype_t, struct bhv_vfs *,
|
||||
struct vnode *,
|
||||
dm_right_t, struct vnode *, dm_right_t,
|
||||
struct bhv_vnode *,
|
||||
dm_right_t, struct bhv_vnode *, dm_right_t,
|
||||
char *, char *, mode_t, int, int);
|
||||
typedef void (*xfs_send_unmount_t)(struct bhv_vfs *, struct vnode *,
|
||||
typedef void (*xfs_send_unmount_t)(struct bhv_vfs *, struct bhv_vnode *,
|
||||
dm_right_t, mode_t, int, int);
|
||||
|
||||
typedef struct xfs_dmops {
|
||||
|
@ -226,7 +226,7 @@ int
|
||||
xfs_rename(
|
||||
bhv_desc_t *src_dir_bdp,
|
||||
vname_t *src_vname,
|
||||
vnode_t *target_dir_vp,
|
||||
bhv_vnode_t *target_dir_vp,
|
||||
vname_t *target_vname,
|
||||
cred_t *credp)
|
||||
{
|
||||
@ -242,7 +242,7 @@ xfs_rename(
|
||||
int committed;
|
||||
xfs_inode_t *inodes[4];
|
||||
int target_ip_dropped = 0; /* dropped target_ip link? */
|
||||
vnode_t *src_dir_vp;
|
||||
bhv_vnode_t *src_dir_vp;
|
||||
int spaceres;
|
||||
int target_link_zero = 0;
|
||||
int num_inodes;
|
||||
@ -609,7 +609,7 @@ xfs_rename(
|
||||
* Let interposed file systems know about removed links.
|
||||
*/
|
||||
if (target_ip_dropped) {
|
||||
VOP_LINK_REMOVED(XFS_ITOV(target_ip), target_dir_vp,
|
||||
bhv_vop_link_removed(XFS_ITOV(target_ip), target_dir_vp,
|
||||
target_link_zero);
|
||||
IRELE(target_ip);
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ xfs_get_dir_entry(
|
||||
vname_t *dentry,
|
||||
xfs_inode_t **ipp)
|
||||
{
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
|
||||
vp = VNAME_TO_VNODE(dentry);
|
||||
|
||||
@ -73,7 +73,7 @@ xfs_dir_lookup_int(
|
||||
xfs_ino_t *inum,
|
||||
xfs_inode_t **ipp)
|
||||
{
|
||||
vnode_t *dir_vp;
|
||||
bhv_vnode_t *dir_vp;
|
||||
xfs_inode_t *dp;
|
||||
int error;
|
||||
|
||||
|
@ -23,7 +23,8 @@
|
||||
#define ITRACE(ip) vn_trace_ref(XFS_ITOV(ip), __FILE__, __LINE__, \
|
||||
(inst_t *)__return_address)
|
||||
|
||||
extern int xfs_rename (bhv_desc_t *, vname_t *, vnode_t *, vname_t *, cred_t *);
|
||||
extern int xfs_rename (bhv_desc_t *, vname_t *, bhv_vnode_t *,
|
||||
vname_t *, cred_t *);
|
||||
extern int xfs_get_dir_entry (vname_t *, xfs_inode_t **);
|
||||
extern int xfs_dir_lookup_int (bhv_desc_t *, uint, vname_t *, xfs_ino_t *,
|
||||
xfs_inode_t **);
|
||||
|
@ -555,7 +555,7 @@ xfs_unmount(
|
||||
bhv_vfs_t *vfsp = bhvtovfs(bdp);
|
||||
xfs_mount_t *mp = XFS_BHVTOM(bdp);
|
||||
xfs_inode_t *rip;
|
||||
vnode_t *rvp;
|
||||
bhv_vnode_t *rvp;
|
||||
int unmount_event_wanted = 0;
|
||||
int unmount_event_flags = 0;
|
||||
int xfs_unmountfs_needed = 0;
|
||||
@ -701,7 +701,7 @@ xfs_unmount_flush(
|
||||
xfs_inode_t *rip = mp->m_rootip;
|
||||
xfs_inode_t *rbmip;
|
||||
xfs_inode_t *rsumip = NULL;
|
||||
vnode_t *rvp = XFS_ITOV(rip);
|
||||
bhv_vnode_t *rvp = XFS_ITOV(rip);
|
||||
int error;
|
||||
|
||||
xfs_ilock(rip, XFS_ILOCK_EXCL);
|
||||
@ -780,9 +780,9 @@ fscorrupt_out2:
|
||||
STATIC int
|
||||
xfs_root(
|
||||
bhv_desc_t *bdp,
|
||||
vnode_t **vpp)
|
||||
bhv_vnode_t **vpp)
|
||||
{
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
|
||||
vp = XFS_ITOV((XFS_BHVTOM(bdp))->m_rootip);
|
||||
VN_HOLD(vp);
|
||||
@ -801,7 +801,7 @@ STATIC int
|
||||
xfs_statvfs(
|
||||
bhv_desc_t *bdp,
|
||||
xfs_statfs_t *statp,
|
||||
vnode_t *vp)
|
||||
bhv_vnode_t *vp)
|
||||
{
|
||||
__uint64_t fakeinos;
|
||||
xfs_extlen_t lsize;
|
||||
@ -916,7 +916,7 @@ xfs_sync_inodes(
|
||||
xfs_inode_t *ip = NULL;
|
||||
xfs_inode_t *ip_next;
|
||||
xfs_buf_t *bp;
|
||||
vnode_t *vp = NULL;
|
||||
bhv_vnode_t *vp = NULL;
|
||||
int error;
|
||||
int last_error;
|
||||
uint64_t fflag;
|
||||
@ -1155,9 +1155,9 @@ xfs_sync_inodes(
|
||||
xfs_iunlock(ip, XFS_ILOCK_SHARED);
|
||||
|
||||
if (XFS_FORCED_SHUTDOWN(mp)) {
|
||||
VOP_TOSS_PAGES(vp, 0, -1, FI_REMAPF);
|
||||
bhv_vop_toss_pages(vp, 0, -1, FI_REMAPF);
|
||||
} else {
|
||||
VOP_FLUSHINVAL_PAGES(vp, 0, -1, FI_REMAPF);
|
||||
bhv_vop_flushinval_pages(vp, 0, -1, FI_REMAPF);
|
||||
}
|
||||
|
||||
xfs_ilock(ip, XFS_ILOCK_SHARED);
|
||||
@ -1177,8 +1177,8 @@ xfs_sync_inodes(
|
||||
* across calls to the buffer cache.
|
||||
*/
|
||||
xfs_iunlock(ip, XFS_ILOCK_SHARED);
|
||||
VOP_FLUSH_PAGES(vp, (xfs_off_t)0, -1,
|
||||
fflag, FI_NONE, error);
|
||||
error = bhv_vop_flush_pages(vp, (xfs_off_t)0,
|
||||
-1, fflag, FI_NONE);
|
||||
xfs_ilock(ip, XFS_ILOCK_SHARED);
|
||||
}
|
||||
|
||||
@ -1230,9 +1230,7 @@ xfs_sync_inodes(
|
||||
* marker and free it.
|
||||
*/
|
||||
XFS_MOUNT_ILOCK(mp);
|
||||
|
||||
IPOINTER_REMOVE(ip, mp);
|
||||
|
||||
XFS_MOUNT_IUNLOCK(mp);
|
||||
|
||||
ASSERT(!(lock_flags &
|
||||
@ -1573,7 +1571,7 @@ xfs_syncsub(
|
||||
STATIC int
|
||||
xfs_vget(
|
||||
bhv_desc_t *bdp,
|
||||
vnode_t **vpp,
|
||||
bhv_vnode_t **vpp,
|
||||
fid_t *fidp)
|
||||
{
|
||||
xfs_mount_t *mp = XFS_BHVTOM(bdp);
|
||||
|
@ -62,7 +62,7 @@ xfs_open(
|
||||
cred_t *credp)
|
||||
{
|
||||
int mode;
|
||||
vnode_t *vp = BHV_TO_VNODE(bdp);
|
||||
bhv_vnode_t *vp = BHV_TO_VNODE(bdp);
|
||||
xfs_inode_t *ip = XFS_BHVTOI(bdp);
|
||||
|
||||
if (XFS_FORCED_SHUTDOWN(ip->i_mount))
|
||||
@ -88,9 +88,8 @@ xfs_close(
|
||||
lastclose_t lastclose,
|
||||
cred_t *credp)
|
||||
{
|
||||
vnode_t *vp = BHV_TO_VNODE(bdp);
|
||||
bhv_vnode_t *vp = BHV_TO_VNODE(bdp);
|
||||
xfs_inode_t *ip = XFS_BHVTOI(bdp);
|
||||
int error = 0;
|
||||
|
||||
if (XFS_FORCED_SHUTDOWN(ip->i_mount))
|
||||
return XFS_ERROR(EIO);
|
||||
@ -108,8 +107,8 @@ xfs_close(
|
||||
* window where we'd otherwise be exposed to that problem.
|
||||
*/
|
||||
if (VUNTRUNCATE(vp) && VN_DIRTY(vp) && ip->i_delayed_blks > 0)
|
||||
VOP_FLUSH_PAGES(vp, 0, -1, XFS_B_ASYNC, FI_NONE, error);
|
||||
return error;
|
||||
return bhv_vop_flush_pages(vp, 0, -1, XFS_B_ASYNC, FI_NONE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -124,7 +123,7 @@ xfs_getattr(
|
||||
{
|
||||
xfs_inode_t *ip;
|
||||
xfs_mount_t *mp;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
|
||||
vp = BHV_TO_VNODE(bdp);
|
||||
vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address);
|
||||
@ -265,7 +264,7 @@ xfs_setattr(
|
||||
uid_t uid=0, iuid=0;
|
||||
gid_t gid=0, igid=0;
|
||||
int timeflags = 0;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
xfs_prid_t projid=0, iprojid=0;
|
||||
int mandlock_before, mandlock_after;
|
||||
struct xfs_dquot *udqp, *gdqp, *olddquot1, *olddquot2;
|
||||
@ -888,7 +887,7 @@ xfs_setattr(
|
||||
*/
|
||||
mandlock_after = MANDLOCK(vp, ip->i_d.di_mode);
|
||||
if (mandlock_before != mandlock_after) {
|
||||
VOP_VNODE_CHANGE(vp, VCHANGE_FLAGS_ENF_LOCKING,
|
||||
bhv_vop_vnode_change(vp, VCHANGE_FLAGS_ENF_LOCKING,
|
||||
mandlock_after);
|
||||
}
|
||||
|
||||
@ -976,7 +975,7 @@ xfs_readlink(
|
||||
int count;
|
||||
xfs_off_t offset;
|
||||
int pathlen;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
int error = 0;
|
||||
xfs_mount_t *mp;
|
||||
int nmaps;
|
||||
@ -1547,7 +1546,7 @@ xfs_release(
|
||||
bhv_desc_t *bdp)
|
||||
{
|
||||
xfs_inode_t *ip;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
xfs_mount_t *mp;
|
||||
int error;
|
||||
|
||||
@ -1600,8 +1599,8 @@ xfs_inactive(
|
||||
cred_t *credp)
|
||||
{
|
||||
xfs_inode_t *ip;
|
||||
vnode_t *vp;
|
||||
xfs_bmap_free_t free_list;
|
||||
bhv_vnode_t *vp;
|
||||
xfs_bmap_free_t free_list;
|
||||
xfs_fsblock_t first_block;
|
||||
int committed;
|
||||
xfs_trans_t *tp;
|
||||
@ -1817,16 +1816,16 @@ STATIC int
|
||||
xfs_lookup(
|
||||
bhv_desc_t *dir_bdp,
|
||||
vname_t *dentry,
|
||||
vnode_t **vpp,
|
||||
bhv_vnode_t **vpp,
|
||||
int flags,
|
||||
vnode_t *rdir,
|
||||
bhv_vnode_t *rdir,
|
||||
cred_t *credp)
|
||||
{
|
||||
xfs_inode_t *dp, *ip;
|
||||
xfs_ino_t e_inum;
|
||||
int error;
|
||||
uint lock_mode;
|
||||
vnode_t *dir_vp;
|
||||
bhv_vnode_t *dir_vp;
|
||||
|
||||
dir_vp = BHV_TO_VNODE(dir_bdp);
|
||||
vn_trace_entry(dir_vp, __FUNCTION__, (inst_t *)__return_address);
|
||||
@ -1855,13 +1854,13 @@ xfs_create(
|
||||
bhv_desc_t *dir_bdp,
|
||||
vname_t *dentry,
|
||||
vattr_t *vap,
|
||||
vnode_t **vpp,
|
||||
bhv_vnode_t **vpp,
|
||||
cred_t *credp)
|
||||
{
|
||||
char *name = VNAME(dentry);
|
||||
vnode_t *dir_vp;
|
||||
bhv_vnode_t *dir_vp;
|
||||
xfs_inode_t *dp, *ip;
|
||||
vnode_t *vp=NULL;
|
||||
bhv_vnode_t *vp = NULL;
|
||||
xfs_trans_t *tp;
|
||||
xfs_mount_t *mp;
|
||||
xfs_dev_t rdev;
|
||||
@ -2047,7 +2046,7 @@ xfs_create(
|
||||
* Propagate the fact that the vnode changed after the
|
||||
* xfs_inode locks have been released.
|
||||
*/
|
||||
VOP_VNODE_CHANGE(vp, VCHANGE_FLAGS_TRUNCATED, 3);
|
||||
bhv_vop_vnode_change(vp, VCHANGE_FLAGS_TRUNCATED, 3);
|
||||
|
||||
*vpp = vp;
|
||||
|
||||
@ -2345,7 +2344,7 @@ xfs_remove(
|
||||
vname_t *dentry,
|
||||
cred_t *credp)
|
||||
{
|
||||
vnode_t *dir_vp;
|
||||
bhv_vnode_t *dir_vp;
|
||||
char *name = VNAME(dentry);
|
||||
xfs_inode_t *dp, *ip;
|
||||
xfs_trans_t *tp = NULL;
|
||||
@ -2532,7 +2531,7 @@ xfs_remove(
|
||||
/*
|
||||
* Let interposed file systems know about removed links.
|
||||
*/
|
||||
VOP_LINK_REMOVED(XFS_ITOV(ip), dir_vp, link_zero);
|
||||
bhv_vop_link_removed(XFS_ITOV(ip), dir_vp, link_zero);
|
||||
|
||||
IRELE(ip);
|
||||
|
||||
@ -2585,7 +2584,7 @@ xfs_remove(
|
||||
STATIC int
|
||||
xfs_link(
|
||||
bhv_desc_t *target_dir_bdp,
|
||||
vnode_t *src_vp,
|
||||
bhv_vnode_t *src_vp,
|
||||
vname_t *dentry,
|
||||
cred_t *credp)
|
||||
{
|
||||
@ -2598,7 +2597,7 @@ xfs_link(
|
||||
xfs_fsblock_t first_block;
|
||||
int cancel_flags;
|
||||
int committed;
|
||||
vnode_t *target_dir_vp;
|
||||
bhv_vnode_t *target_dir_vp;
|
||||
int resblks;
|
||||
char *target_name = VNAME(dentry);
|
||||
int target_namelen;
|
||||
@ -2757,13 +2756,13 @@ xfs_mkdir(
|
||||
bhv_desc_t *dir_bdp,
|
||||
vname_t *dentry,
|
||||
vattr_t *vap,
|
||||
vnode_t **vpp,
|
||||
bhv_vnode_t **vpp,
|
||||
cred_t *credp)
|
||||
{
|
||||
char *dir_name = VNAME(dentry);
|
||||
xfs_inode_t *dp;
|
||||
xfs_inode_t *cdp; /* inode of created dir */
|
||||
vnode_t *cvp; /* vnode of created dir */
|
||||
bhv_vnode_t *cvp; /* vnode of created dir */
|
||||
xfs_trans_t *tp;
|
||||
xfs_mount_t *mp;
|
||||
int cancel_flags;
|
||||
@ -2771,7 +2770,7 @@ xfs_mkdir(
|
||||
int committed;
|
||||
xfs_bmap_free_t free_list;
|
||||
xfs_fsblock_t first_block;
|
||||
vnode_t *dir_vp;
|
||||
bhv_vnode_t *dir_vp;
|
||||
boolean_t dp_joined_to_trans;
|
||||
boolean_t created = B_FALSE;
|
||||
int dm_event_sent = 0;
|
||||
@ -3003,7 +3002,7 @@ xfs_rmdir(
|
||||
xfs_fsblock_t first_block;
|
||||
int cancel_flags;
|
||||
int committed;
|
||||
vnode_t *dir_vp;
|
||||
bhv_vnode_t *dir_vp;
|
||||
int dm_di_mode = 0;
|
||||
int last_cdp_link;
|
||||
int namelen;
|
||||
@ -3202,7 +3201,7 @@ xfs_rmdir(
|
||||
/*
|
||||
* Let interposed file systems know about removed links.
|
||||
*/
|
||||
VOP_LINK_REMOVED(XFS_ITOV(cdp), dir_vp, last_cdp_link);
|
||||
bhv_vop_link_removed(XFS_ITOV(cdp), dir_vp, last_cdp_link);
|
||||
|
||||
IRELE(cdp);
|
||||
|
||||
@ -3272,7 +3271,7 @@ xfs_symlink(
|
||||
vname_t *dentry,
|
||||
vattr_t *vap,
|
||||
char *target_path,
|
||||
vnode_t **vpp,
|
||||
bhv_vnode_t **vpp,
|
||||
cred_t *credp)
|
||||
{
|
||||
xfs_trans_t *tp;
|
||||
@ -3284,7 +3283,7 @@ xfs_symlink(
|
||||
xfs_bmap_free_t free_list;
|
||||
xfs_fsblock_t first_block;
|
||||
boolean_t dp_joined_to_trans;
|
||||
vnode_t *dir_vp;
|
||||
bhv_vnode_t *dir_vp;
|
||||
uint cancel_flags;
|
||||
int committed;
|
||||
xfs_fileoff_t first_fsb;
|
||||
@ -3562,7 +3561,7 @@ std_return:
|
||||
}
|
||||
|
||||
if (!error) {
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
|
||||
ASSERT(ip);
|
||||
vp = XFS_ITOV(ip);
|
||||
@ -3630,7 +3629,7 @@ xfs_rwlock(
|
||||
vrwlock_t locktype)
|
||||
{
|
||||
xfs_inode_t *ip;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
|
||||
vp = BHV_TO_VNODE(bdp);
|
||||
if (VN_ISDIR(vp))
|
||||
@ -3661,7 +3660,7 @@ xfs_rwunlock(
|
||||
vrwlock_t locktype)
|
||||
{
|
||||
xfs_inode_t *ip;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
|
||||
vp = BHV_TO_VNODE(bdp);
|
||||
if (VN_ISDIR(vp))
|
||||
@ -3810,7 +3809,7 @@ xfs_reclaim(
|
||||
bhv_desc_t *bdp)
|
||||
{
|
||||
xfs_inode_t *ip;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
|
||||
vp = BHV_TO_VNODE(bdp);
|
||||
ip = XFS_BHVTOI(bdp);
|
||||
@ -3865,7 +3864,7 @@ xfs_finish_reclaim(
|
||||
int sync_mode)
|
||||
{
|
||||
xfs_ihash_t *ih = ip->i_hash;
|
||||
vnode_t *vp = XFS_ITOV_NULL(ip);
|
||||
bhv_vnode_t *vp = XFS_ITOV_NULL(ip);
|
||||
int error;
|
||||
|
||||
if (vp && VN_BAD(vp))
|
||||
@ -4275,7 +4274,7 @@ xfs_free_file_space(
|
||||
xfs_off_t len,
|
||||
int attr_flags)
|
||||
{
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
int committed;
|
||||
int done;
|
||||
xfs_off_t end_dmi_offset;
|
||||
@ -4341,7 +4340,7 @@ xfs_free_file_space(
|
||||
if (VN_CACHED(vp) != 0) {
|
||||
xfs_inval_cached_trace(&ip->i_iocore, ioffset, -1,
|
||||
ctooff(offtoct(ioffset)), -1);
|
||||
VOP_FLUSHINVAL_PAGES(vp, ctooff(offtoct(ioffset)),
|
||||
bhv_vop_flushinval_pages(vp, ctooff(offtoct(ioffset)),
|
||||
-1, FI_REMAPF_LOCKED);
|
||||
}
|
||||
|
||||
@ -4504,7 +4503,7 @@ xfs_change_file_space(
|
||||
xfs_off_t llen;
|
||||
xfs_trans_t *tp;
|
||||
vattr_t va;
|
||||
vnode_t *vp;
|
||||
bhv_vnode_t *vp;
|
||||
|
||||
vp = BHV_TO_VNODE(bdp);
|
||||
vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address);
|
||||
@ -4657,7 +4656,7 @@ xfs_change_file_space(
|
||||
return error;
|
||||
}
|
||||
|
||||
vnodeops_t xfs_vnodeops = {
|
||||
bhv_vnodeops_t xfs_vnodeops = {
|
||||
BHV_IDENTITY_INIT(VN_BHV_XFS,VNODE_POSITION_XFS),
|
||||
.vop_open = xfs_open,
|
||||
.vop_close = xfs_close,
|
||||
|
Loading…
Reference in New Issue
Block a user