|
Lines 749-754
Link Here
|
| 749 |
int error; |
756 |
int error; |
| 750 |
struct vnode *lvp, *uvp; |
757 |
struct vnode *lvp, *uvp; |
| 751 |
|
758 |
|
|
|
759 |
struct union_mount *um; |
| 760 |
|
| 761 |
um = MOUNTTOUNIONMOUNT(UNIONTOV(un)->v_mount); |
| 752 |
/* |
762 |
/* |
| 753 |
* If the user does not have read permission, the vnode should not |
763 |
* If the user does not have read permission, the vnode should not |
| 754 |
* be copied to upper layer. |
764 |
* be copied to upper layer. |
|
Lines 784-789
Link Here
|
| 784 |
UDEBUG(("union: copied up %s\n", un->un_path)); |
794 |
UDEBUG(("union: copied up %s\n", un->un_path)); |
| 785 |
|
795 |
|
| 786 |
} |
796 |
} |
|
|
797 |
if(error == 0 && um->um_flag & UNMNT_CPATTR){ |
| 798 |
struct vattr loattr, newattr; |
| 799 |
int aerror; |
| 800 |
struct ucred cred; |
| 801 |
|
| 802 |
VATTR_NULL(&loattr); |
| 803 |
cred.cr_ref = 1; |
| 804 |
cred.cr_uid = 0; |
| 805 |
cred.cr_ngroups = 1; |
| 806 |
cred.cr_groups[0] = 0; |
| 807 |
cred.cr_uidinfo = 0; |
| 808 |
aerror = VOP_GETATTR(lvp, &loattr, &cred, p); |
| 809 |
if(aerror == 0) { |
| 810 |
VATTR_NULL(&newattr); |
| 811 |
newattr.va_uid = loattr.va_uid; |
| 812 |
newattr.va_gid = loattr.va_gid; |
| 813 |
aerror = VOP_SETATTR(uvp, &newattr, &cred, p); |
| 814 |
} |
| 815 |
} |
| 816 |
out:; |
| 787 |
VOP_UNLOCK(uvp, 0, p); |
817 |
VOP_UNLOCK(uvp, 0, p); |
| 788 |
union_newupper(un, uvp); |
818 |
union_newupper(un, uvp); |
| 789 |
KASSERT(uvp->v_usecount > 0, ("copy: uvp refcount 0: %d", uvp->v_usecount)); |
819 |
KASSERT(uvp->v_usecount > 0, ("copy: uvp refcount 0: %d", uvp->v_usecount)); |