diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-02-16 01:07:24 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-02-16 01:07:24 +0000 |
commit | 95db6b748fc86297827fbd9c9ef174d491c9ad89 (patch) | |
tree | 27a92a942821cde1edda9a1b088718d436b3efe4 /fs/ufs | |
parent | 45b27b0a0652331d104c953a5b192d843fff88f8 (diff) |
Merge with Linux 2.3.40.
Diffstat (limited to 'fs/ufs')
-rw-r--r-- | fs/ufs/ialloc.c | 2 | ||||
-rw-r--r-- | fs/ufs/inode.c | 32 | ||||
-rw-r--r-- | fs/ufs/super.c | 44 |
3 files changed, 43 insertions, 35 deletions
diff --git a/fs/ufs/ialloc.c b/fs/ufs/ialloc.c index fa4dfa06a..8b1943a84 100644 --- a/fs/ufs/ialloc.c +++ b/fs/ufs/ialloc.c @@ -289,8 +289,6 @@ cg_found: inode->i_blocks = 0; inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; inode->u.ufs_i.i_flags = dir->u.ufs_i.i_flags; - inode->u.ufs_i.i_uid = inode->i_uid; - inode->u.ufs_i.i_gid = inode->i_gid; inode->u.ufs_i.i_lastfrag = 0; inode->i_op = NULL; diff --git a/fs/ufs/inode.c b/fs/ufs/inode.c index 21171a864..333186247 100644 --- a/fs/ufs/inode.c +++ b/fs/ufs/inode.c @@ -54,11 +54,11 @@ static void ufs_print_inode(struct inode * inode) { unsigned swab = inode->i_sb->u.ufs_sb.s_swab; - printk("ino %lu mode 0%6.6o nlink %d uid %d uid32 %u" - " gid %d gid32 %u size %lu blocks %lu\n", + printk("ino %lu mode 0%6.6o nlink %d uid %d gid %d" + " size %lu blocks %lu\n", inode->i_ino, inode->i_mode, inode->i_nlink, - inode->i_uid, inode->u.ufs_i.i_uid, inode->i_gid, - inode->u.ufs_i.i_gid, inode->i_size, inode->i_blocks); + inode->i_uid, inode->i_gid, + inode->i_size, inode->i_blocks); printk(" db <%u %u %u %u %u %u %u %u %u %u %u %u>\n", SWAB32(inode->u.ufs_i.i_u1.i_data[0]), SWAB32(inode->u.ufs_i.i_u1.i_data[1]), @@ -578,17 +578,10 @@ void ufs_read_inode (struct inode * inode) ufs_error (sb, "ufs_read_inode", "inode %lu has zero nlink\n", inode->i_ino); /* - * Linux has only 16-bit uid and gid, so we can't support EFT. - * Files are dynamically chown()ed to root. + * Linux now has 32-bit uid and gid, so we can support EFT. */ - inode->i_uid = inode->u.ufs_i.i_uid = ufs_get_inode_uid(ufs_inode); - inode->i_gid = inode->u.ufs_i.i_gid = ufs_get_inode_gid(ufs_inode); - if (inode->u.ufs_i.i_uid >= UFS_USEEFT) { - inode->i_uid = 0; - } - if (inode->u.ufs_i.i_gid >= UFS_USEEFT) { - inode->i_gid = 0; - } + inode->i_uid = ufs_get_inode_uid(ufs_inode); + inode->i_gid = ufs_get_inode_gid(ufs_inode); /* * Linux i_size can be 32 on some architectures. We will mark @@ -678,15 +671,8 @@ static int ufs_update_inode(struct inode * inode, int do_sync) ufs_inode->ui_mode = SWAB16(inode->i_mode); ufs_inode->ui_nlink = SWAB16(inode->i_nlink); - if (inode->i_uid == 0 && inode->u.ufs_i.i_uid >= UFS_USEEFT) - ufs_set_inode_uid (ufs_inode, inode->u.ufs_i.i_uid); - else - ufs_set_inode_uid (ufs_inode, inode->i_uid); - - if (inode->i_gid == 0 && inode->u.ufs_i.i_gid >= UFS_USEEFT) - ufs_set_inode_gid (ufs_inode, inode->u.ufs_i.i_gid); - else - ufs_set_inode_gid (ufs_inode, inode->i_gid); + ufs_set_inode_uid (ufs_inode, inode->i_uid); + ufs_set_inode_gid (ufs_inode, inode->i_gid); ufs_inode->ui_size = SWAB64((u64)inode->i_size); ufs_inode->ui_atime.tv_sec = SWAB32(inode->i_atime); diff --git a/fs/ufs/super.c b/fs/ufs/super.c index 11a13baec..901c91ff2 100644 --- a/fs/ufs/super.c +++ b/fs/ufs/super.c @@ -452,8 +452,14 @@ struct super_block * ufs_read_super (struct super_block * sb, void * data, MOD_INC_USE_COUNT; lock_super (sb); + UFSD(("flag %u\n", (int)(sb->s_flags & MS_RDONLY))) + #ifndef CONFIG_UFS_FS_WRITE - sb->s_flags |= MS_RDONLY; + if (!(sb->s_flags & MS_RDONLY)) { + printk("ufs was compiled with read-only support, " + "can't be mounted as read-write\n"); + goto failed; + } #endif /* * Set default mount options @@ -632,12 +638,14 @@ magic_found: uspi->s_fmask = SWAB32(usb1->fs_fmask); uspi->s_fshift = SWAB32(usb1->fs_fshift); - if (uspi->s_bsize != 4096 && uspi->s_bsize != 8192) { - printk("ufs_read_super: fs_bsize %u != {4096, 8192}\n", uspi->s_bsize); + if (uspi->s_bsize != 4096 && uspi->s_bsize != 8192 + && uspi->s_bsize != 32768) { + printk("ufs_read_super: fs_bsize %u != {4096, 8192, 32768}\n", uspi->s_bsize); goto failed; } - if (uspi->s_fsize != 512 && uspi->s_fsize != 1024 && uspi->s_fsize != 2048) { - printk("ufs_read_super: fs_fsize %u != {512, 1024, 2048}\n", uspi->s_fsize); + if (uspi->s_fsize != 512 && uspi->s_fsize != 1024 + && uspi->s_fsize != 2048 && uspi->s_fsize != 4096) { + printk("ufs_read_super: fs_fsize %u != {512, 1024, 2048. 4096}\n", uspi->s_fsize); goto failed; } if (uspi->s_fsize != block_size || uspi->s_sbsize != super_block_size) { @@ -869,10 +877,15 @@ int ufs_remount (struct super_block * sb, int * mount_flags, char * data) printk("ufstype can't be changed during remount\n"); return -EINVAL; } - sb->u.ufs_sb.s_mount_opt = new_mount_opt; - if ((*mount_flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) + if ((*mount_flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) { + sb->u.ufs_sb.s_mount_opt = new_mount_opt; return 0; + } + + /* + * fs was mouted as rw, remounting ro + */ if (*mount_flags & MS_RDONLY) { ufs_put_cylinder_structures(sb); usb1->fs_time = SWAB32(CURRENT_TIME); @@ -883,18 +896,29 @@ int ufs_remount (struct super_block * sb, int * mount_flags, char * data) sb->s_dirt = 0; sb->s_flags |= MS_RDONLY; } + /* + * fs was mounted as ro, remounting rw + */ else { +#ifndef CONFIG_UFS_FS_WRITE + printk("ufs was compiled with read-only support, " + "can't be mounted as read-write\n"); + return -EINVAL; +#else if (ufstype != UFS_MOUNT_UFSTYPE_SUN && - ufstype != UFS_MOUNT_UFSTYPE_44BSD) { + ufstype != UFS_MOUNT_UFSTYPE_44BSD && + ufstype != UFS_MOUNT_UFSTYPE_SUNx86) { printk("this ufstype is read-only supported\n"); - return 0; + return -EINVAL; } if (!ufs_read_cylinder_structures (sb)) { printk("failed during remounting\n"); - return 0; + return -EPERM; } sb->s_flags &= ~MS_RDONLY; +#endif } + sb->u.ufs_sb.s_mount_opt = new_mount_opt; return 0; } |