PERFORCE change 164365 for review
Aditya Sarawgi
truncs at FreeBSD.org
Sun Jun 14 18:26:08 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=164365
Change 164365 by truncs at 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);
}
More information about the p4-projects
mailing list