Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge git://oss.sgi.com:8090/xfs-2.6

* git://oss.sgi.com:8090/xfs-2.6:
[XFS] Fix a possible metadata buffer (AGFL) refcount leak when fixing an
[XFS] Fix a project quota space accounting leak on rename.
[XFS] Fix a possible forced shutdown due to mishandling write barriers

+26 -20
+4 -1
fs/xfs/xfs_alloc.c
··· 1942 1942 /* 1943 1943 * Allocate as many blocks as possible at once. 1944 1944 */ 1945 - if ((error = xfs_alloc_ag_vextent(&targs))) 1945 + if ((error = xfs_alloc_ag_vextent(&targs))) { 1946 + xfs_trans_brelse(tp, agflbp); 1946 1947 return error; 1948 + } 1947 1949 /* 1948 1950 * Stop if we run out. Won't happen if callers are obeying 1949 1951 * the restrictions correctly. Can happen for free calls ··· 1962 1960 return error; 1963 1961 } 1964 1962 } 1963 + xfs_trans_brelse(tp, agflbp); 1965 1964 args->agbp = agbp; 1966 1965 return 0; 1967 1966 }
+12
fs/xfs/xfs_rename.c
··· 316 316 } 317 317 } 318 318 319 + /* 320 + * If we are using project inheritance, we only allow renames 321 + * into our tree when the project IDs are the same; else the 322 + * tree quota mechanism would be circumvented. 323 + */ 324 + if (unlikely((target_dp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) && 325 + (target_dp->i_d.di_projid != src_ip->i_d.di_projid))) { 326 + error = XFS_ERROR(EXDEV); 327 + xfs_rename_unlock4(inodes, XFS_ILOCK_SHARED); 328 + goto rele_return; 329 + } 330 + 319 331 new_parent = (src_dp != target_dp); 320 332 src_is_directory = ((src_ip->i_d.di_mode & S_IFMT) == S_IFDIR); 321 333
+9 -18
fs/xfs/xfs_vfsops.c
··· 669 669 xfs_mount_t *mp = XFS_BHVTOM(bdp); 670 670 int error; 671 671 672 - if (args->flags & XFSMNT_BARRIER) 673 - mp->m_flags |= XFS_MOUNT_BARRIER; 674 - else 675 - mp->m_flags &= ~XFS_MOUNT_BARRIER; 676 - 677 - if ((vfsp->vfs_flag & VFS_RDONLY) && 678 - !(*flags & MS_RDONLY)) { 679 - vfsp->vfs_flag &= ~VFS_RDONLY; 680 - 681 - if (args->flags & XFSMNT_BARRIER) 672 + if (!(*flags & MS_RDONLY)) { /* rw/ro -> rw */ 673 + if (vfsp->vfs_flag & VFS_RDONLY) 674 + vfsp->vfs_flag &= ~VFS_RDONLY; 675 + if (args->flags & XFSMNT_BARRIER) { 676 + mp->m_flags |= XFS_MOUNT_BARRIER; 682 677 xfs_mountfs_check_barriers(mp); 683 - } 684 - 685 - if (!(vfsp->vfs_flag & VFS_RDONLY) && 686 - (*flags & MS_RDONLY)) { 678 + } else { 679 + mp->m_flags &= ~XFS_MOUNT_BARRIER; 680 + } 681 + } else if (!(vfsp->vfs_flag & VFS_RDONLY)) { /* rw -> ro */ 687 682 VFS_SYNC(vfsp, SYNC_FSDATA|SYNC_BDFLUSH|SYNC_ATTR, NULL, error); 688 - 689 683 xfs_quiesce_fs(mp); 690 - 691 - /* Ok now write out an unmount record */ 692 684 xfs_log_unmount_write(mp); 693 685 xfs_unmountfs_writesb(mp); 694 686 vfsp->vfs_flag |= VFS_RDONLY; 695 687 } 696 - 697 688 return 0; 698 689 } 699 690
+1 -1
fs/xfs/xfs_vnodeops.c
··· 2663 2663 */ 2664 2664 if (unlikely((tdp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) && 2665 2665 (tdp->i_d.di_projid != sip->i_d.di_projid))) { 2666 - error = XFS_ERROR(EPERM); 2666 + error = XFS_ERROR(EXDEV); 2667 2667 goto error_return; 2668 2668 } 2669 2669