ext2_vnops.c (193377) | ext2_vnops.c (194296) |
---|---|
1/*- 2 * modified for EXT2FS support in Lites 1.1 3 * 4 * Aug 1995, Godmar Back (gback@cs.utah.edu) 5 * University of Utah, Department of Computer Science 6 */ 7/*- 8 * Copyright (c) 1982, 1986, 1989, 1993 --- 25 unchanged lines hidden (view full) --- 34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 37 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 38 * SUCH DAMAGE. 39 * 40 * @(#)ufs_vnops.c 8.7 (Berkeley) 2/3/94 41 * @(#)ufs_vnops.c 8.27 (Berkeley) 5/27/95 | 1/*- 2 * modified for EXT2FS support in Lites 1.1 3 * 4 * Aug 1995, Godmar Back (gback@cs.utah.edu) 5 * University of Utah, Department of Computer Science 6 */ 7/*- 8 * Copyright (c) 1982, 1986, 1989, 1993 --- 25 unchanged lines hidden (view full) --- 34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 37 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 38 * SUCH DAMAGE. 39 * 40 * @(#)ufs_vnops.c 8.7 (Berkeley) 2/3/94 41 * @(#)ufs_vnops.c 8.27 (Berkeley) 5/27/95 |
42 * $FreeBSD: head/sys/gnu/fs/ext2fs/ext2_vnops.c 193377 2009-06-03 13:25:50Z stas $ | 42 * $FreeBSD: head/sys/gnu/fs/ext2fs/ext2_vnops.c 194296 2009-06-16 15:13:45Z kib $ |
43 */ 44 45#include "opt_suiddir.h" 46 47#include <sys/param.h> 48#include <sys/systm.h> 49#include <sys/resourcevar.h> 50#include <sys/kernel.h> --- 992 unchanged lines hidden (view full) --- 1043 * and ".." set to point to the new parent. 1044 */ 1045 if (doingdirectory && newparent) { 1046 dp->i_nlink--; 1047 dp->i_flag |= IN_CHANGE; 1048 error = vn_rdwr(UIO_READ, fvp, (caddr_t)&dirbuf, 1049 sizeof (struct dirtemplate), (off_t)0, 1050 UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK, | 43 */ 44 45#include "opt_suiddir.h" 46 47#include <sys/param.h> 48#include <sys/systm.h> 49#include <sys/resourcevar.h> 50#include <sys/kernel.h> --- 992 unchanged lines hidden (view full) --- 1043 * and ".." set to point to the new parent. 1044 */ 1045 if (doingdirectory && newparent) { 1046 dp->i_nlink--; 1047 dp->i_flag |= IN_CHANGE; 1048 error = vn_rdwr(UIO_READ, fvp, (caddr_t)&dirbuf, 1049 sizeof (struct dirtemplate), (off_t)0, 1050 UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK, |
1051 tcnp->cn_cred, NOCRED, (int *)0, 1052 (struct thread *)0); | 1051 tcnp->cn_cred, NOCRED, NULL, NULL); |
1053 if (error == 0) { 1054 /* Like ufs little-endian: */ 1055 namlen = dirbuf.dotdot_type; 1056 if (namlen != 2 || 1057 dirbuf.dotdot_name[0] != '.' || 1058 dirbuf.dotdot_name[1] != '.') { 1059 ext2_dirbad(xp, (doff_t)12, 1060 "rename: mangled dir"); 1061 } else { 1062 dirbuf.dotdot_ino = newparent; 1063 (void) vn_rdwr(UIO_WRITE, fvp, 1064 (caddr_t)&dirbuf, 1065 sizeof (struct dirtemplate), 1066 (off_t)0, UIO_SYSSPACE, 1067 IO_NODELOCKED | IO_SYNC | 1068 IO_NOMACCHECK, tcnp->cn_cred, | 1052 if (error == 0) { 1053 /* Like ufs little-endian: */ 1054 namlen = dirbuf.dotdot_type; 1055 if (namlen != 2 || 1056 dirbuf.dotdot_name[0] != '.' || 1057 dirbuf.dotdot_name[1] != '.') { 1058 ext2_dirbad(xp, (doff_t)12, 1059 "rename: mangled dir"); 1060 } else { 1061 dirbuf.dotdot_ino = newparent; 1062 (void) vn_rdwr(UIO_WRITE, fvp, 1063 (caddr_t)&dirbuf, 1064 sizeof (struct dirtemplate), 1065 (off_t)0, UIO_SYSSPACE, 1066 IO_NODELOCKED | IO_SYNC | 1067 IO_NOMACCHECK, tcnp->cn_cred, |
1069 NOCRED, (int *)0, 1070 (struct thread *)0); | 1068 NOCRED, NULL, NULL); |
1071 cache_purge(fdvp); 1072 } 1073 } 1074 } 1075 error = ext2_dirremove(fdvp, fcnp); 1076 if (!error) { 1077 xp->i_nlink--; 1078 xp->i_flag |= IN_CHANGE; --- 119 unchanged lines hidden (view full) --- 1198 * so let's just redefine it - for this function only 1199 */ 1200#undef DIRBLKSIZ 1201#define DIRBLKSIZ VTOI(dvp)->i_e2fs->s_blocksize 1202 dirtemplate.dotdot_reclen = DIRBLKSIZ - 12; 1203 error = vn_rdwr(UIO_WRITE, tvp, (caddr_t)&dirtemplate, 1204 sizeof (dirtemplate), (off_t)0, UIO_SYSSPACE, 1205 IO_NODELOCKED | IO_SYNC | IO_NOMACCHECK, cnp->cn_cred, NOCRED, | 1069 cache_purge(fdvp); 1070 } 1071 } 1072 } 1073 error = ext2_dirremove(fdvp, fcnp); 1074 if (!error) { 1075 xp->i_nlink--; 1076 xp->i_flag |= IN_CHANGE; --- 119 unchanged lines hidden (view full) --- 1196 * so let's just redefine it - for this function only 1197 */ 1198#undef DIRBLKSIZ 1199#define DIRBLKSIZ VTOI(dvp)->i_e2fs->s_blocksize 1200 dirtemplate.dotdot_reclen = DIRBLKSIZ - 12; 1201 error = vn_rdwr(UIO_WRITE, tvp, (caddr_t)&dirtemplate, 1202 sizeof (dirtemplate), (off_t)0, UIO_SYSSPACE, 1203 IO_NODELOCKED | IO_SYNC | IO_NOMACCHECK, cnp->cn_cred, NOCRED, |
1206 (int *)0, (struct thread *)0); | 1204 NULL, NULL); |
1207 if (error) { 1208 dp->i_nlink--; 1209 dp->i_flag |= IN_CHANGE; 1210 goto bad; 1211 } 1212 if (DIRBLKSIZ > VFSTOEXT2(dvp->v_mount)->um_mountp->mnt_stat.f_bsize) 1213 /* XXX should grow with balloc() */ 1214 panic("ext2_mkdir: blksize"); --- 120 unchanged lines hidden (view full) --- 1335 if (len < vp->v_mount->mnt_maxsymlinklen) { 1336 ip = VTOI(vp); 1337 bcopy(ap->a_target, (char *)ip->i_shortlink, len); 1338 ip->i_size = len; 1339 ip->i_flag |= IN_CHANGE | IN_UPDATE; 1340 } else 1341 error = vn_rdwr(UIO_WRITE, vp, ap->a_target, len, (off_t)0, 1342 UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK, | 1205 if (error) { 1206 dp->i_nlink--; 1207 dp->i_flag |= IN_CHANGE; 1208 goto bad; 1209 } 1210 if (DIRBLKSIZ > VFSTOEXT2(dvp->v_mount)->um_mountp->mnt_stat.f_bsize) 1211 /* XXX should grow with balloc() */ 1212 panic("ext2_mkdir: blksize"); --- 120 unchanged lines hidden (view full) --- 1333 if (len < vp->v_mount->mnt_maxsymlinklen) { 1334 ip = VTOI(vp); 1335 bcopy(ap->a_target, (char *)ip->i_shortlink, len); 1336 ip->i_size = len; 1337 ip->i_flag |= IN_CHANGE | IN_UPDATE; 1338 } else 1339 error = vn_rdwr(UIO_WRITE, vp, ap->a_target, len, (off_t)0, 1340 UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK, |
1343 ap->a_cnp->cn_cred, NOCRED, (int *)0, (struct thread *)0); | 1341 ap->a_cnp->cn_cred, NOCRED, NULL, NULL); |
1344 if (error) 1345 vput(vp); 1346 return (error); 1347} 1348 1349/* 1350 * Return target name of a symbolic link 1351 */ --- 296 unchanged lines hidden --- | 1342 if (error) 1343 vput(vp); 1344 return (error); 1345} 1346 1347/* 1348 * Return target name of a symbolic link 1349 */ --- 296 unchanged lines hidden --- |