summaryrefslogtreecommitdiffstats
path: root/fs/ufs
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-02-16 01:07:24 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-02-16 01:07:24 +0000
commit95db6b748fc86297827fbd9c9ef174d491c9ad89 (patch)
tree27a92a942821cde1edda9a1b088718d436b3efe4 /fs/ufs
parent45b27b0a0652331d104c953a5b192d843fff88f8 (diff)
Merge with Linux 2.3.40.
Diffstat (limited to 'fs/ufs')
-rw-r--r--fs/ufs/ialloc.c2
-rw-r--r--fs/ufs/inode.c32
-rw-r--r--fs/ufs/super.c44
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;
}