patch-2.0.34 linux/fs/msdos/namei.c
Next file: linux/fs/ncpfs/inode.c
Previous file: linux/fs/minix/bitmap.c
Back to the patch index
Back to the overall index
- Lines: 70
- Date:
Wed Jun 3 15:17:49 1998
- Orig file:
v2.0.33/linux/fs/msdos/namei.c
- Orig date:
Sat Nov 30 02:21:21 1996
diff -u --recursive --new-file v2.0.33/linux/fs/msdos/namei.c linux/fs/msdos/namei.c
@@ -60,6 +60,7 @@
MOD_INC_USE_COUNT;
+ MSDOS_SB(sb)->options.isvfat = 0;
sb->s_op = &msdos_sops;
res = fat_read_super(sb, data, silent);
if (res == NULL)
@@ -263,7 +264,9 @@
if ((res = fat_scan(dir,NULL,&bh,&de,&ino,SCAN_ANY)) < 0) {
if (res != -ENOENT) return res;
- if (dir->i_ino == MSDOS_ROOT_INO) return -ENOSPC;
+ if ((dir->i_ino == MSDOS_ROOT_INO) &&
+ (MSDOS_SB(sb)->fat_bits != 32))
+ return -ENOSPC;
if ((res = fat_add_cluster(dir)) < 0) return res;
if ((res = fat_scan(dir,NULL,&bh,&de,&ino,SCAN_ANY)) < 0) return res;
}
@@ -273,10 +276,10 @@
dir->i_ctime = dir->i_mtime = CURRENT_TIME;
dir->i_dirt = 1;
memcpy(de->name,name,MSDOS_NAME);
- memset(de->unused, 0, sizeof(de->unused));
de->attr = is_dir ? ATTR_DIR : ATTR_ARCH;
de->attr = is_hid ? (de->attr|ATTR_HIDDEN) : (de->attr&~ATTR_HIDDEN);
de->start = 0;
+ de->starthi = 0;
fat_date_unix2dos(dir->i_mtime,&de->time,&de->date);
de->size = 0;
fat_mark_buffer_dirty(sb, bh, 1);
@@ -367,6 +370,9 @@
pos = 0;
bh = NULL;
while (fat_get_entry(dir,&pos,&bh,&de) > -1)
+ /* Ignore vfat longname entries */
+ if (de->attr == ATTR_EXT)
+ continue;
if (!IS_FREE(de->name) && strncmp(de->name,MSDOS_DOT,
MSDOS_NAME) && strncmp(de->name,MSDOS_DOTDOT,
MSDOS_NAME)) {
@@ -456,6 +462,7 @@
goto mkdir_error;
dot->i_size = inode->i_size; /* doesn't grow in the 2nd create_entry */
MSDOS_I(dot)->i_start = MSDOS_I(inode)->i_start;
+ MSDOS_I(dot)->i_logstart = MSDOS_I(inode)->i_logstart;
dot->i_nlink = inode->i_nlink;
dot->i_dirt = 1;
iput(dot);
@@ -464,6 +471,7 @@
fat_unlock_creation();
dot->i_size = dir->i_size;
MSDOS_I(dot)->i_start = MSDOS_I(dir)->i_start;
+ MSDOS_I(dot)->i_logstart = MSDOS_I(dir)->i_logstart;
dot->i_nlink = dir->i_nlink;
dot->i_dirt = 1;
MSDOS_I(inode)->i_busy = 0;
@@ -718,8 +726,10 @@
error = -EIO;
goto rename_done;
}
- dotdot_de->start = MSDOS_I(dotdot_inode)->i_start =
- MSDOS_I(new_dir)->i_start;
+ MSDOS_I(dotdot_inode)->i_start = MSDOS_I(new_dir)->i_start;
+ MSDOS_I(dotdot_inode)->i_logstart = MSDOS_I(new_dir)->i_logstart;
+ dotdot_de->start = CT_LE_W(MSDOS_I(new_dir)->i_logstart);
+ dotdot_de->starthi = CT_LE_W((MSDOS_I(new_dir)->i_logstart) >> 16);
dotdot_inode->i_dirt = 1;
fat_mark_buffer_dirty(sb, dotdot_bh, 1);
old_dir->i_nlink--;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov