Date: Sun, 14 Jun 2009 18:26:06 GMT From: Aditya Sarawgi <truncs@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 164365 for review Message-ID: <200906141826.n5EIQ6hT058090@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=164365 Change 164365 by truncs@aditya on 2009/06/14 18:25:12 Renaming to new directory structure. Affected files ... .. //depot/projects/soc2009/soc_ext2fs/src/sys/gnu/fs/ext2fs/ext2_lookup.c#6 edit Differences ... ==== //depot/projects/soc2009/soc_ext2fs/src/sys/gnu/fs/ext2fs/ext2_lookup.c#6 (text+ko) ==== @@ -111,7 +111,7 @@ ((dt) > sizeof(dt_to_ext2_ft) / sizeof(dt_to_ext2_ft[0]) ? \ EXT2_FT_UNKNOWN : dt_to_ext2_ft[(dt)]) -static int ext2_dirbadentry(struct vnode *dp, struct ext2_dir_entry_2 *de, +static int ext2_dirbadentry(struct vnode *dp, struct ext2fs_direct_2 *de, int entryoffsetinblock); /* @@ -143,7 +143,7 @@ struct uio *uio = ap->a_uio; int count, error; - struct ext2_dir_entry_2 *edp, *dp; + struct ext2fs_direct_2 *edp, *dp; int ncookies; struct dirent dstdp; struct uio auio; @@ -182,10 +182,10 @@ error = VOP_READ(ap->a_vp, &auio, 0, ap->a_cred); if (error == 0) { readcnt = count - auio.uio_resid; - edp = (struct ext2_dir_entry_2 *)&dirbuf[readcnt]; + edp = (struct ext2fs_direct_2 *)&dirbuf[readcnt]; ncookies = 0; bzero(&dstdp, offsetof(struct dirent, d_name)); - for (dp = (struct ext2_dir_entry_2 *)dirbuf; + for (dp = (struct ext2fs_direct_2 *)dirbuf; !error && uio->uio_resid > 0 && dp < edp; ) { /*- * "New" ext2fs directory entries differ in 3 ways @@ -203,20 +203,20 @@ * because ext2fs uses a machine-independent disk * layout. */ - dstdp.d_fileno = dp->inode; - dstdp.d_type = FTTODT(dp->file_type); - dstdp.d_namlen = dp->name_len; + dstdp.d_fileno = dp->e2d_ino; + dstdp.d_type = FTTODT(dp->e2d_type); + dstdp.d_namlen = dp->e2d_namlen; dstdp.d_reclen = GENERIC_DIRSIZ(&dstdp); - bcopy(dp->name, dstdp.d_name, dstdp.d_namlen); + bcopy(dp->e2d_name, dstdp.d_name, dstdp.d_namlen); bzero(dstdp.d_name + dstdp.d_namlen, dstdp.d_reclen - offsetof(struct dirent, d_name) - dstdp.d_namlen); - if (dp->rec_len > 0) { + if (dp->e2d_reclen > 0) { if(dstdp.d_reclen <= uio->uio_resid) { /* advance dp */ - dp = (struct ext2_dir_entry_2 *) - ((char *)dp + dp->rec_len); + dp = (struct ext2fs_direct_2 *) + ((char *)dp + dp->e2d_reclen); error = uiomove(&dstdp, dstdp.d_reclen, uio); if (!error) @@ -240,11 +240,11 @@ cookies = malloc(ncookies * sizeof(u_long), M_TEMP, M_WAITOK); off = startoffset; - for (dp = (struct ext2_dir_entry_2 *)dirbuf, + for (dp = (struct ext2fs_direct_2 *)dirbuf, cookiep = cookies, ecookies = cookies + ncookies; cookiep < ecookies; - dp = (struct ext2_dir_entry_2 *)((caddr_t) dp + dp->rec_len)) { - off += dp->rec_len; + dp = (struct ext2fs_direct_2 *)((caddr_t) dp + dp->e2d_reclen)) { + off += dp->e2d_reclen; *cookiep++ = (u_long) off; } *ap->a_ncookies = ncookies; @@ -298,7 +298,7 @@ struct vnode *vdp; /* vnode for directory being searched */ struct inode *dp; /* inode for directory being searched */ struct buf *bp; /* a buffer of directory entries */ - struct ext2_dir_entry_2 *ep; /* the current directory entry */ + struct ext2fs_direct_2 *ep; /* the current directory entry */ int entryoffsetinblock; /* offset of ep in bp's buffer */ enum {NONE, COMPACT, FOUND} slotstatus; doff_t slotoffset; /* offset of area with free space */ @@ -408,9 +408,9 @@ * directory. Complete checks can be run by setting * "vfs.e2fs.dirchk" to be true. */ - ep = (struct ext2_dir_entry_2 *) + ep = (struct ext2fs_direct_2 *) ((char *)bp->b_data + entryoffsetinblock); - if (ep->rec_len == 0 || + if (ep->e2d_reclen == 0 || (dirchk && ext2_dirbadentry(vdp, ep, entryoffsetinblock))) { int i; ext2_dirbad(dp, dp->i_offset, "mangled entry"); @@ -427,15 +427,15 @@ * compaction is viable. */ if (slotstatus != FOUND) { - int size = ep->rec_len; + int size = ep->e2d_reclen; - if (ep->inode != 0) - size -= EXT2_DIR_REC_LEN(ep->name_len); + if (ep->e2d_ino != 0) + size -= EXT2_DIR_REC_LEN(ep->e2d_namlen); if (size > 0) { if (size >= slotneeded) { slotstatus = FOUND; slotoffset = dp->i_offset; - slotsize = ep->rec_len; + slotsize = ep->e2d_reclen; } else if (slotstatus == NONE) { slotfreespace += size; if (slotoffset == -1) @@ -443,7 +443,7 @@ if (slotfreespace >= slotneeded) { slotstatus = COMPACT; slotsize = dp->i_offset + - ep->rec_len - slotoffset; + ep->e2d_reclen - slotoffset; } } } @@ -452,25 +452,25 @@ /* * Check for a name match. */ - if (ep->inode) { - namlen = ep->name_len; + if (ep->e2d_ino) { + namlen = ep->e2d_namlen; if (namlen == cnp->cn_namelen && - !bcmp(cnp->cn_nameptr, ep->name, + !bcmp(cnp->cn_nameptr, ep->e2d_name, (unsigned)namlen)) { /* * Save directory entry's inode number and * reclen in ndp->ni_ufs area, and release * directory buffer. */ - dp->i_ino = ep->inode; - dp->i_reclen = ep->rec_len; + dp->i_ino = ep->e2d_ino; + dp->i_reclen = ep->e2d_reclen; goto found; } } prevoff = dp->i_offset; - dp->i_offset += ep->rec_len; - entryoffsetinblock += ep->rec_len; - if (ep->inode) + dp->i_offset += ep->e2d_reclen; + entryoffsetinblock += ep->e2d_reclen; + if (ep->e2d_ino) enduseful = dp->i_offset; } /* notfound: */ @@ -550,10 +550,10 @@ * Check that directory length properly reflects presence * of this entry. */ - if (entryoffsetinblock + EXT2_DIR_REC_LEN(ep->name_len) + if (entryoffsetinblock + EXT2_DIR_REC_LEN(ep->e2d_namlen) > dp->i_size) { ext2_dirbad(dp, dp->i_offset, "i_size too small"); - dp->i_size = entryoffsetinblock+EXT2_DIR_REC_LEN(ep->name_len); + dp->i_size = entryoffsetinblock+EXT2_DIR_REC_LEN(ep->e2d_namlen); dp->i_flag |= IN_CHANGE | IN_UPDATE; } brelse(bp); @@ -709,20 +709,20 @@ static int ext2_dirbadentry(dp, de, entryoffsetinblock) struct vnode *dp; - struct ext2_dir_entry_2 *de; + struct ext2fs_direct_2 *de; int entryoffsetinblock; { int DIRBLKSIZ = VTOI(dp)->i_e2fs->e2fs_bsize; char * error_msg = NULL; - if (de->rec_len < EXT2_DIR_REC_LEN(1)) + if (de->e2d_reclen < EXT2_DIR_REC_LEN(1)) error_msg = "rec_len is smaller than minimal"; - else if (de->rec_len % 4 != 0) + else if (de->e2d_reclen % 4 != 0) error_msg = "rec_len % 4 != 0"; - else if (de->rec_len < EXT2_DIR_REC_LEN(de->name_len)) + else if (de->e2d_reclen < EXT2_DIR_REC_LEN(de->e2d_namlen)) error_msg = "reclen is too small for name_len"; - else if (entryoffsetinblock + de->rec_len > DIRBLKSIZ) + else if (entryoffsetinblock + de->e2d_reclen > DIRBLKSIZ) error_msg = "directory entry across blocks"; /* else LATER if (de->inode > dir->i_sb->u.ext2_sb.s_es->s_inodes_count) @@ -732,8 +732,8 @@ if (error_msg != NULL) { printf("bad directory entry: %s\n", error_msg); printf("offset=%d, inode=%lu, rec_len=%u, name_len=%u\n", - entryoffsetinblock, (unsigned long)de->inode, - de->rec_len, de->name_len); + entryoffsetinblock, (unsigned long)de->e2d_ino, + de->e2d_reclen, de->e2d_namlen); } return error_msg == NULL ? 0 : 1; } @@ -752,10 +752,10 @@ struct vnode *dvp; struct componentname *cnp; { - struct ext2_dir_entry_2 *ep, *nep; + struct ext2fs_direct_2 *ep, *nep; struct inode *dp; struct buf *bp; - struct ext2_dir_entry_2 newdir; + struct ext2fs_direct_2 newdir; struct iovec aiov; struct uio auio; u_int dsize; @@ -769,15 +769,15 @@ panic("direnter: missing name"); #endif dp = VTOI(dvp); - newdir.inode = ip->i_number; - newdir.name_len = cnp->cn_namelen; + newdir.e2d_ino = ip->i_number; + newdir.e2d_namlen = cnp->cn_namelen; if (EXT2_HAS_INCOMPAT_FEATURE(ip->i_e2fs, EXT2F_INCOMPAT_FTYPE)) - newdir.file_type = DTTOFT(IFTODT(ip->i_mode)); + newdir.e2d_type = DTTOFT(IFTODT(ip->i_mode)); else - newdir.file_type = EXT2_FT_UNKNOWN; - bcopy(cnp->cn_nameptr, newdir.name, (unsigned)cnp->cn_namelen + 1); - newentrysize = EXT2_DIR_REC_LEN(newdir.name_len); + newdir.e2d_type = EXT2_FT_UNKNOWN; + bcopy(cnp->cn_nameptr, newdir.e2d_name, (unsigned)cnp->cn_namelen + 1); + newentrysize = EXT2_DIR_REC_LEN(newdir.e2d_namlen); if (dp->i_count == 0) { /* * If dp->i_count is 0, then namei could find no @@ -788,7 +788,7 @@ if (dp->i_offset & (DIRBLKSIZ - 1)) panic("ext2_direnter: newblk"); auio.uio_offset = dp->i_offset; - newdir.rec_len = DIRBLKSIZ; + newdir.e2d_reclen = DIRBLKSIZ; auio.uio_resid = newentrysize; aiov.iov_len = newentrysize; aiov.iov_base = (caddr_t)&newdir; @@ -840,38 +840,38 @@ * dp->i_offset + dp->i_count would yield the * space. */ - ep = (struct ext2_dir_entry_2 *)dirbuf; - dsize = EXT2_DIR_REC_LEN(ep->name_len); - spacefree = ep->rec_len - dsize; - for (loc = ep->rec_len; loc < dp->i_count; ) { - nep = (struct ext2_dir_entry_2 *)(dirbuf + loc); - if (ep->inode) { + ep = (struct ext2fs_direct_2 *)dirbuf; + dsize = EXT2_DIR_REC_LEN(ep->e2d_namlen); + spacefree = ep->e2d_reclen - dsize; + for (loc = ep->e2d_reclen; loc < dp->i_count; ) { + nep = (struct ext2fs_direct_2 *)(dirbuf + loc); + if (ep->e2d_ino) { /* trim the existing slot */ - ep->rec_len = dsize; - ep = (struct ext2_dir_entry_2 *)((char *)ep + dsize); + ep->e2d_reclen = dsize; + ep = (struct ext2fs_direct_2 *)((char *)ep + dsize); } else { /* overwrite; nothing there; header is ours */ spacefree += dsize; } - dsize = EXT2_DIR_REC_LEN(nep->name_len); - spacefree += nep->rec_len - dsize; - loc += nep->rec_len; + dsize = EXT2_DIR_REC_LEN(nep->e2d_namlen); + spacefree += nep->e2d_reclen - dsize; + loc += nep->e2d_reclen; bcopy((caddr_t)nep, (caddr_t)ep, dsize); } /* * Update the pointer fields in the previous entry (if any), * copy in the new entry, and write out the block. */ - if (ep->inode == 0) { + if (ep->e2d_ino == 0) { if (spacefree + dsize < newentrysize) panic("ext2_direnter: compact1"); - newdir.rec_len = spacefree + dsize; + newdir.e2d_reclen = spacefree + dsize; } else { if (spacefree < newentrysize) panic("ext2_direnter: compact2"); - newdir.rec_len = spacefree; - ep->rec_len = dsize; - ep = (struct ext2_dir_entry_2 *)((char *)ep + dsize); + newdir.e2d_reclen = spacefree; + ep->e2d_reclen = dsize; + ep = (struct ext2fs_direct_2 *)((char *)ep + dsize); } bcopy((caddr_t)&newdir, (caddr_t)ep, (u_int)newentrysize); error = bwrite(bp); @@ -900,7 +900,7 @@ struct componentname *cnp; { struct inode *dp; - struct ext2_dir_entry_2 *ep; + struct ext2fs_direct_2 *ep; struct buf *bp; int error; @@ -913,7 +913,7 @@ ext2_blkatoff(dvp, (off_t)dp->i_offset, (char **)&ep, &bp)) != 0) return (error); - ep->inode = 0; + ep->e2d_ino = 0; error = bwrite(bp); dp->i_flag |= IN_CHANGE | IN_UPDATE; return (error); @@ -924,7 +924,7 @@ if ((error = ext2_blkatoff(dvp, (off_t)(dp->i_offset - dp->i_count), (char **)&ep, &bp)) != 0) return (error); - ep->rec_len += dp->i_reclen; + ep->e2d_reclen += dp->i_reclen; error = bwrite(bp); dp->i_flag |= IN_CHANGE | IN_UPDATE; return (error); @@ -941,19 +941,19 @@ struct componentname *cnp; { struct buf *bp; - struct ext2_dir_entry_2 *ep; + struct ext2fs_direct_2 *ep; struct vnode *vdp = ITOV(dp); int error; if ((error = ext2_blkatoff(vdp, (off_t)dp->i_offset, (char **)&ep, &bp)) != 0) return (error); - ep->inode = ip->i_number; + ep->e2d_ino = ip->i_number; if (EXT2_HAS_INCOMPAT_FEATURE(ip->i_e2fs, EXT2F_INCOMPAT_FTYPE)) - ep->file_type = DTTOFT(IFTODT(ip->i_mode)); + ep->e2d_type = DTTOFT(IFTODT(ip->i_mode)); else - ep->file_type = EXT2_FT_UNKNOWN; + ep->e2d_type = EXT2_FT_UNKNOWN; error = bwrite(bp); dp->i_flag |= IN_CHANGE | IN_UPDATE; return (error); @@ -976,11 +976,11 @@ { off_t off; struct dirtemplate dbuf; - struct ext2_dir_entry_2 *dp = (struct ext2_dir_entry_2 *)&dbuf; + struct ext2fs_direct_2 *dp = (struct ext2fs_direct_2 *)&dbuf; int error, count, namlen; #define MINDIRSIZ (sizeof (struct dirtemplate) / 2) - for (off = 0; off < ip->i_size; off += dp->rec_len) { + for (off = 0; off < ip->i_size; off += dp->e2d_reclen) { error = vn_rdwr(UIO_READ, ITOV(ip), (caddr_t)dp, MINDIRSIZ, off, UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK, cred, NOCRED, &count, (struct thread *)0); @@ -991,16 +991,16 @@ if (error || count != 0) return (0); /* avoid infinite loops */ - if (dp->rec_len == 0) + if (dp->e2d_reclen == 0) return (0); /* skip empty entries */ - if (dp->inode == 0) + if (dp->e2d_ino == 0) continue; /* accept only "." and ".." */ - namlen = dp->name_len; + namlen = dp->e2d_namlen; if (namlen > 2) return (0); - if (dp->name[0] != '.') + if (dp->e2d_name[0] != '.') return (0); /* * At this point namlen must be 1 or 2. @@ -1009,7 +1009,7 @@ */ if (namlen == 1) continue; - if (dp->name[1] == '.' && dp->inode == parentino) + if (dp->e2d_name[1] == '.' && dp->e2d_ino == parentino) continue; return (0); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906141826.n5EIQ6hT058090>