Loading fs/xfs/linux-2.6/xfs_buf.c +7 −0 Original line number Diff line number Diff line Loading @@ -822,6 +822,13 @@ xfs_buf_rele( XB_TRACE(bp, "rele", bp->b_relse); if (unlikely(!hash)) { ASSERT(!bp->b_relse); if (atomic_dec_and_test(&bp->b_hold)) xfs_buf_free(bp); return; } if (atomic_dec_and_lock(&bp->b_hold, &hash->bh_lock)) { if (bp->b_relse) { atomic_inc(&bp->b_hold); Loading fs/xfs/linux-2.6/xfs_iops.c +32 −18 Original line number Diff line number Diff line Loading @@ -262,6 +262,31 @@ has_fs_struct(struct task_struct *task) return (task->fs != init_task.fs); } STATIC inline void cleanup_inode( vnode_t *dvp, vnode_t *vp, struct dentry *dentry, int mode) { struct dentry teardown = {}; int err2; /* Oh, the horror. * If we can't add the ACL or we fail in * linvfs_init_security we must back out. * ENOSPC can hit here, among other things. */ teardown.d_inode = LINVFS_GET_IP(vp); teardown.d_name = dentry->d_name; if (S_ISDIR(mode)) VOP_RMDIR(dvp, &teardown, NULL, err2); else VOP_REMOVE(dvp, &teardown, NULL, err2); VN_RELE(vp); } STATIC int linvfs_mknod( struct inode *dir, Loading Loading @@ -316,30 +341,19 @@ linvfs_mknod( } if (!error) { error = linvfs_init_security(vp, dir); if (error) cleanup_inode(dvp, vp, dentry, mode); } if (default_acl) { if (!error) { error = _ACL_INHERIT(vp, &va, default_acl); if (!error) { if (!error) VMODIFY(vp); } else { struct dentry teardown = {}; int err2; /* Oh, the horror. * If we can't add the ACL we must back out. * ENOSPC can hit here, among other things. */ teardown.d_inode = ip = LINVFS_GET_IP(vp); teardown.d_name = dentry->d_name; if (S_ISDIR(mode)) VOP_RMDIR(dvp, &teardown, NULL, err2); else VOP_REMOVE(dvp, &teardown, NULL, err2); VN_RELE(vp); } cleanup_inode(dvp, vp, dentry, mode); } _ACL_FREE(default_acl); } Loading Loading
fs/xfs/linux-2.6/xfs_buf.c +7 −0 Original line number Diff line number Diff line Loading @@ -822,6 +822,13 @@ xfs_buf_rele( XB_TRACE(bp, "rele", bp->b_relse); if (unlikely(!hash)) { ASSERT(!bp->b_relse); if (atomic_dec_and_test(&bp->b_hold)) xfs_buf_free(bp); return; } if (atomic_dec_and_lock(&bp->b_hold, &hash->bh_lock)) { if (bp->b_relse) { atomic_inc(&bp->b_hold); Loading
fs/xfs/linux-2.6/xfs_iops.c +32 −18 Original line number Diff line number Diff line Loading @@ -262,6 +262,31 @@ has_fs_struct(struct task_struct *task) return (task->fs != init_task.fs); } STATIC inline void cleanup_inode( vnode_t *dvp, vnode_t *vp, struct dentry *dentry, int mode) { struct dentry teardown = {}; int err2; /* Oh, the horror. * If we can't add the ACL or we fail in * linvfs_init_security we must back out. * ENOSPC can hit here, among other things. */ teardown.d_inode = LINVFS_GET_IP(vp); teardown.d_name = dentry->d_name; if (S_ISDIR(mode)) VOP_RMDIR(dvp, &teardown, NULL, err2); else VOP_REMOVE(dvp, &teardown, NULL, err2); VN_RELE(vp); } STATIC int linvfs_mknod( struct inode *dir, Loading Loading @@ -316,30 +341,19 @@ linvfs_mknod( } if (!error) { error = linvfs_init_security(vp, dir); if (error) cleanup_inode(dvp, vp, dentry, mode); } if (default_acl) { if (!error) { error = _ACL_INHERIT(vp, &va, default_acl); if (!error) { if (!error) VMODIFY(vp); } else { struct dentry teardown = {}; int err2; /* Oh, the horror. * If we can't add the ACL we must back out. * ENOSPC can hit here, among other things. */ teardown.d_inode = ip = LINVFS_GET_IP(vp); teardown.d_name = dentry->d_name; if (S_ISDIR(mode)) VOP_RMDIR(dvp, &teardown, NULL, err2); else VOP_REMOVE(dvp, &teardown, NULL, err2); VN_RELE(vp); } cleanup_inode(dvp, vp, dentry, mode); } _ACL_FREE(default_acl); } Loading