Commit c580cc2b authored by Dave Kleikamp's avatar Dave Kleikamp

Merge jfs@jfs.bkbits.net:linux-2.5

into austin.ibm.com:/shaggy/bk/jfs-2.5
parents 9dc49036 1af2511d
...@@ -12,10 +12,9 @@ Barry Arndt barndt@us.ibm.com ...@@ -12,10 +12,9 @@ Barry Arndt barndt@us.ibm.com
The following mount options are supported: The following mount options are supported:
iocharset=name Character set to use for converting from Unicode to iocharset=name Character set to use for converting from Unicode to
ASCII. The default is compiled into the kernel as ASCII. The default is to do no conversion. Use
CONFIG_NLS_DEFAULT. Use iocharset=utf8 for UTF8 iocharset=utf8 for UTF8 translations. This requires
translations. This requires CONFIG_NLS_UTF8 to be set CONFIG_NLS_UTF8 to be set in the kernel .config file.
in the kernel .config file.
resize=value Resize the volume to <value> blocks. JFS only supports resize=value Resize the volume to <value> blocks. JFS only supports
growing a volume, not shrinking it. This option is only growing a volume, not shrinking it. This option is only
...@@ -36,18 +35,6 @@ errors=continue Keep going on a filesystem error. ...@@ -36,18 +35,6 @@ errors=continue Keep going on a filesystem error.
errors=remount-ro Default. Remount the filesystem read-only on an error. errors=remount-ro Default. Remount the filesystem read-only on an error.
errors=panic Panic and halt the machine if an error occurs. errors=panic Panic and halt the machine if an error occurs.
JFS TODO list:
Plans for our near term development items
- enhance support for logfile on dedicated partition
Longer term work items
- implement defrag utility, for online defragmenting
- add quota support
- add support for block sizes (512,1024,2048)
Please send bugs, comments, cards and letters to shaggy@austin.ibm.com. Please send bugs, comments, cards and letters to shaggy@austin.ibm.com.
The JFS mailing list can be subscribed to by using the link labeled The JFS mailing list can be subscribed to by using the link labeled
......
/* /*
* Copyright (c) International Business Machines Corp., 2000-2002 * Copyright (C) International Business Machines Corp., 2000-2004
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/slab.h> #include <linux/slab.h>
#include "jfs_types.h" #include "jfs_incore.h"
#include "jfs_filsys.h" #include "jfs_filsys.h"
#include "jfs_unicode.h" #include "jfs_unicode.h"
#include "jfs_debug.h" #include "jfs_debug.h"
...@@ -35,16 +35,22 @@ int jfs_strfromUCS_le(char *to, const wchar_t * from, /* LITTLE ENDIAN */ ...@@ -35,16 +35,22 @@ int jfs_strfromUCS_le(char *to, const wchar_t * from, /* LITTLE ENDIAN */
int i; int i;
int outlen = 0; int outlen = 0;
for (i = 0; (i < len) && from[i]; i++) { if (codepage) {
int charlen; for (i = 0; (i < len) && from[i]; i++) {
charlen = int charlen;
codepage->uni2char(le16_to_cpu(from[i]), &to[outlen], charlen =
NLS_MAX_CHARSET_SIZE); codepage->uni2char(le16_to_cpu(from[i]),
if (charlen > 0) { &to[outlen],
outlen += charlen; NLS_MAX_CHARSET_SIZE);
} else { if (charlen > 0)
to[outlen++] = '?'; outlen += charlen;
else
to[outlen++] = '?';
} }
} else {
for (i = 0; (i < len) && from[i]; i++)
to[i] = (char) (le16_to_cpu(from[i]));
outlen = i;
} }
to[outlen] = 0; to[outlen] = 0;
return outlen; return outlen;
...@@ -62,14 +68,22 @@ int jfs_strtoUCS(wchar_t * to, ...@@ -62,14 +68,22 @@ int jfs_strtoUCS(wchar_t * to,
int charlen; int charlen;
int i; int i;
for (i = 0; len && *from; i++, from += charlen, len -= charlen) { if (codepage) {
charlen = codepage->char2uni(from, len, &to[i]); for (i = 0; len && *from; i++, from += charlen, len -= charlen)
if (charlen < 1) { {
jfs_err("jfs_strtoUCS: char2uni returned %d.", charlen); charlen = codepage->char2uni(from, len, &to[i]);
jfs_err("charset = %s, char = 0x%x", if (charlen < 1) {
codepage->charset, (unsigned char) *from); jfs_err("jfs_strtoUCS: char2uni returned %d.",
return charlen; charlen);
jfs_err("charset = %s, char = 0x%x",
codepage->charset,
(unsigned char) *from);
return charlen;
}
} }
} else {
for (i = 0; (i < len) && from[i]; i++)
to[i] = (wchar_t) from[i];
} }
to[i] = 0; to[i] = 0;
...@@ -82,9 +96,9 @@ int jfs_strtoUCS(wchar_t * to, ...@@ -82,9 +96,9 @@ int jfs_strtoUCS(wchar_t * to,
* FUNCTION: Allocate and translate to unicode string * FUNCTION: Allocate and translate to unicode string
* *
*/ */
int get_UCSname(struct component_name * uniName, struct dentry *dentry, int get_UCSname(struct component_name * uniName, struct dentry *dentry)
struct nls_table *nls_tab)
{ {
struct nls_table *nls_tab = JFS_SBI(dentry->d_sb)->nls_tab;
int length = dentry->d_name.len; int length = dentry->d_name.len;
if (length > JFS_NAME_MAX) if (length > JFS_NAME_MAX)
......
...@@ -30,8 +30,7 @@ typedef struct { ...@@ -30,8 +30,7 @@ typedef struct {
extern signed char UniUpperTable[512]; extern signed char UniUpperTable[512];
extern UNICASERANGE UniUpperRange[]; extern UNICASERANGE UniUpperRange[];
extern int get_UCSname(struct component_name *, struct dentry *, extern int get_UCSname(struct component_name *, struct dentry *);
struct nls_table *);
extern int jfs_strfromUCS_le(char *, const wchar_t *, int, struct nls_table *); extern int jfs_strfromUCS_le(char *, const wchar_t *, int, struct nls_table *);
#define free_UCSname(COMP) kfree((COMP)->name) #define free_UCSname(COMP) kfree((COMP)->name)
......
...@@ -78,7 +78,7 @@ int jfs_create(struct inode *dip, struct dentry *dentry, int mode, ...@@ -78,7 +78,7 @@ int jfs_create(struct inode *dip, struct dentry *dentry, int mode,
* search parent directory for entry/freespace * search parent directory for entry/freespace
* (dtSearch() returns parent directory page pinned) * (dtSearch() returns parent directory page pinned)
*/ */
if ((rc = get_UCSname(&dname, dentry, JFS_SBI(dip->i_sb)->nls_tab))) if ((rc = get_UCSname(&dname, dentry)))
goto out1; goto out1;
/* /*
...@@ -204,7 +204,7 @@ int jfs_mkdir(struct inode *dip, struct dentry *dentry, int mode) ...@@ -204,7 +204,7 @@ int jfs_mkdir(struct inode *dip, struct dentry *dentry, int mode)
* search parent directory for entry/freespace * search parent directory for entry/freespace
* (dtSearch() returns parent directory page pinned) * (dtSearch() returns parent directory page pinned)
*/ */
if ((rc = get_UCSname(&dname, dentry, JFS_SBI(dip->i_sb)->nls_tab))) if ((rc = get_UCSname(&dname, dentry)))
goto out1; goto out1;
/* /*
...@@ -332,7 +332,7 @@ int jfs_rmdir(struct inode *dip, struct dentry *dentry) ...@@ -332,7 +332,7 @@ int jfs_rmdir(struct inode *dip, struct dentry *dentry)
goto out; goto out;
} }
if ((rc = get_UCSname(&dname, dentry, JFS_SBI(dip->i_sb)->nls_tab))) { if ((rc = get_UCSname(&dname, dentry))) {
goto out; goto out;
} }
...@@ -451,7 +451,7 @@ int jfs_unlink(struct inode *dip, struct dentry *dentry) ...@@ -451,7 +451,7 @@ int jfs_unlink(struct inode *dip, struct dentry *dentry)
jfs_info("jfs_unlink: dip:0x%p name:%s", dip, dentry->d_name.name); jfs_info("jfs_unlink: dip:0x%p name:%s", dip, dentry->d_name.name);
if ((rc = get_UCSname(&dname, dentry, JFS_SBI(dip->i_sb)->nls_tab))) if ((rc = get_UCSname(&dname, dentry)))
goto out; goto out;
IWRITE_LOCK(ip); IWRITE_LOCK(ip);
...@@ -786,7 +786,7 @@ int jfs_link(struct dentry *old_dentry, ...@@ -786,7 +786,7 @@ int jfs_link(struct dentry *old_dentry,
/* /*
* scan parent directory for entry/freespace * scan parent directory for entry/freespace
*/ */
if ((rc = get_UCSname(&dname, dentry, JFS_SBI(ip->i_sb)->nls_tab))) if ((rc = get_UCSname(&dname, dentry)))
goto out; goto out;
if ((rc = dtSearch(dir, &dname, &ino, &btstack, JFS_CREATE))) if ((rc = dtSearch(dir, &dname, &ino, &btstack, JFS_CREATE)))
...@@ -866,7 +866,7 @@ int jfs_symlink(struct inode *dip, struct dentry *dentry, const char *name) ...@@ -866,7 +866,7 @@ int jfs_symlink(struct inode *dip, struct dentry *dentry, const char *name)
* (dtSearch() returns parent directory page pinned) * (dtSearch() returns parent directory page pinned)
*/ */
if ((rc = get_UCSname(&dname, dentry, JFS_SBI(dip->i_sb)->nls_tab))) if ((rc = get_UCSname(&dname, dentry)))
goto out1; goto out1;
/* /*
...@@ -1069,12 +1069,10 @@ int jfs_rename(struct inode *old_dir, struct dentry *old_dentry, ...@@ -1069,12 +1069,10 @@ int jfs_rename(struct inode *old_dir, struct dentry *old_dentry,
old_ip = old_dentry->d_inode; old_ip = old_dentry->d_inode;
new_ip = new_dentry->d_inode; new_ip = new_dentry->d_inode;
if ((rc = get_UCSname(&old_dname, old_dentry, if ((rc = get_UCSname(&old_dname, old_dentry)))
JFS_SBI(old_dir->i_sb)->nls_tab)))
goto out1; goto out1;
if ((rc = get_UCSname(&new_dname, new_dentry, if ((rc = get_UCSname(&new_dname, new_dentry)))
JFS_SBI(old_dir->i_sb)->nls_tab)))
goto out2; goto out2;
/* /*
...@@ -1329,7 +1327,7 @@ int jfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev) ...@@ -1329,7 +1327,7 @@ int jfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev)
jfs_info("jfs_mknod: %s", dentry->d_name.name); jfs_info("jfs_mknod: %s", dentry->d_name.name);
if ((rc = get_UCSname(&dname, dentry, JFS_SBI(dir->i_sb)->nls_tab))) if ((rc = get_UCSname(&dname, dentry)))
goto out; goto out;
ip = ialloc(dir, mode); ip = ialloc(dir, mode);
...@@ -1411,8 +1409,7 @@ static struct dentry *jfs_lookup(struct inode *dip, struct dentry *dentry, struc ...@@ -1411,8 +1409,7 @@ static struct dentry *jfs_lookup(struct inode *dip, struct dentry *dentry, struc
else if (strcmp(name, "..") == 0) else if (strcmp(name, "..") == 0)
inum = PARENT(dip); inum = PARENT(dip);
else { else {
if ((rc = if ((rc = get_UCSname(&key, dentry)))
get_UCSname(&key, dentry, JFS_SBI(dip->i_sb)->nls_tab)))
return ERR_PTR(rc); return ERR_PTR(rc);
rc = dtSearch(dip, &key, &inum, &btstack, JFS_LOOKUP); rc = dtSearch(dip, &key, &inum, &btstack, JFS_LOOKUP);
free_UCSname(&key); free_UCSname(&key);
......
...@@ -195,7 +195,8 @@ static void jfs_put_super(struct super_block *sb) ...@@ -195,7 +195,8 @@ static void jfs_put_super(struct super_block *sb)
rc = jfs_umount(sb); rc = jfs_umount(sb);
if (rc) if (rc)
jfs_err("jfs_umount failed with return code %d", rc); jfs_err("jfs_umount failed with return code %d", rc);
unload_nls(sbi->nls_tab); if (sbi->nls_tab)
unload_nls(sbi->nls_tab);
sbi->nls_tab = NULL; sbi->nls_tab = NULL;
kfree(sbi); kfree(sbi);
...@@ -435,9 +436,6 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent) ...@@ -435,9 +436,6 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent)
if (!sb->s_root) if (!sb->s_root)
goto out_no_root; goto out_no_root;
if (!sbi->nls_tab)
sbi->nls_tab = load_nls_default();
/* logical blocks are represented by 40 bits in pxd_t, etc. */ /* logical blocks are represented by 40 bits in pxd_t, etc. */
sb->s_maxbytes = ((u64) sb->s_blocksize) << 40; sb->s_maxbytes = ((u64) sb->s_blocksize) << 40;
#if BITS_PER_LONG == 32 #if BITS_PER_LONG == 32
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment