Index: bk-2.6-d/fs/jfs/Makefile
===================================================================
--- bk-2.6-d.orig/fs/jfs/Makefile 2004-09-03 11:56:29.346497580 -0500
+++ bk-2.6-d/fs/jfs/Makefile 2004-09-03 12:35:06.030955251 -0500
@@ -3,7 +3,7 @@
#
ifeq ($(CONFIG_JFS_DMAPI),y)
- EXTRA_CFLAGS += -I$(TOPDIR)/fs/jfs -DDM_USE_SHASH
+ EXTRA_CFLAGS += -I$(TOPDIR)/fs/jfs -I$(TOPDIR)/fs/dmapi
endif
obj-$(CONFIG_JFS_FS) += jfs.o
@@ -16,22 +16,6 @@ jfs-y := super.o file.o inode.o namei
jfs-$(CONFIG_JFS_POSIX_ACL) += acl.o
-jfs-$(CONFIG_JFS_DMAPI) += $(addprefix dmapi/, \
- dmapi_sysent.o \
- dmapi_attr.o \
- dmapi_config.o \
- dmapi_bulkattr.o \
- dmapi_dmattr.o \
- dmapi_event.o \
- dmapi_handle.o \
- dmapi_hole.o \
- dmapi_io.o \
- dmapi_mountinfo.o \
- dmapi_region.o \
- dmapi_register.o \
- dmapi_right.o \
- dmapi_session.o \
- dmapi_jfs.o \
- kmem.o)
+jfs-$(CONFIG_JFS_DMAPI) += dmapi/dmapi_jfs.o dmapi/kmem.o
EXTRA_CFLAGS += -D_JFS_4K
Index: bk-2.6-d/fs/jfs/dmapi/dmapi_jfs.c
===================================================================
--- bk-2.6-d.orig/fs/jfs/dmapi/dmapi_jfs.c 2004-09-03 12:35:05.043007813 -0500
+++ bk-2.6-d/fs/jfs/dmapi/dmapi_jfs.c 2004-09-03 14:57:11.423825217 -0500
@@ -44,7 +44,8 @@
#include <linux/ioctl.h>
#include <linux/ioctl32.h>
#endif
-#include "dmapi_private.h"
+#include <dmapi.h>
+#include <dmapi_kern.h>
#include "jfs_debug.h"
#include "jfs_incore.h"
#include "jfs_filsys.h"
@@ -52,6 +53,7 @@
#include "jfs_txnmgr.h"
#include "jfs_dmap.h"
#include "jfs_dmapi.h"
+#include "dmapi/kmem.h"
/* Here's what's left to be done:
* Figure out locktype in jfs_dm_send_data_event()
@@ -573,7 +575,7 @@ jfs_dm_bulkstat_one(
{
struct inode *ip;
dm_stat_t *buf;
- jfs_handle_t handle;
+ dm_handle_t handle;
u_int statstruct_sz;
buf = (dm_stat_t *)buffer;
@@ -611,7 +613,7 @@ jfs_dm_bulkstat_one(
memcpy(buf+1, &handle, sizeof(handle)); /* handle follows stat struct */
buf->dt_handle.vd_offset = (int) sizeof(dm_stat_t);
- buf->dt_handle.vd_length = (unsigned int) JFS_HSIZE(handle);
+ buf->dt_handle.vd_length = (unsigned int) DM_HSIZE(handle);
statstruct_sz = (statstruct_sz+(DM_STAT_ALIGN-1)) & ~(DM_STAT_ALIGN-1);
} else {
@@ -1077,7 +1079,7 @@ jfs_dm_rdwr(
int error;
int oflags;
ssize_t xfer;
- struct file file;
+ struct file *file;
struct dentry *dentry;
boolean_t bCloseFile = FALSE;
struct jfs_inode_info *ji = JFS_IP(ip);
@@ -1097,7 +1099,7 @@ jfs_dm_rdwr(
*/
fmode |= FINVIS;
- oflags |= O_NONBLOCK;
+ oflags |= O_NONBLOCK | O_LARGEFILE;
if (jfs_dm_direct_ok(ip, off, len, bufp))
oflags |= O_DIRECT;
@@ -1130,32 +1132,21 @@ jfs_dm_rdwr(
}
}
- error = open_private_file( &file, dentry, oflags );
- if(error){
- if (error == -EFBIG) {
- /* try again */
- oflags |= O_LARGEFILE;
- file.f_flags = oflags;
- error = file.f_op->open( dentry->d_inode, &file );
- }
- if (error) {
- if (fmode & FMODE_WRITE)
- put_write_access(ip);
- dput(dentry);
- return(-EINVAL);
- }
+ file = dentry_open(dentry, NULL, oflags);
+ if (IS_ERR(file)) {
+ if (fmode & FMODE_WRITE)
+ put_write_access(ip);
+ return(-EINVAL);
} else {
bCloseFile = TRUE;
}
- /* file.f_flags = oflags; handled by open_private_file now */
-
if (fmode & FMODE_READ) {
/* generic_file_read updates the atime but we need to
* undo that because this I/O was supposed to be invisible.
*/
struct timespec save_atime = ip->i_atime;
- xfer = generic_file_read(&file, bufp, len, &off);
+ xfer = generic_file_read(file, bufp, len, &off);
ip->i_atime = save_atime;
mark_inode_dirty(ip);
} else {
@@ -1165,7 +1156,7 @@ jfs_dm_rdwr(
*/
struct timespec save_mtime = ip->i_mtime;
struct timespec save_ctime = ip->i_ctime;
- xfer = generic_file_write(&file, bufp, len, &off);
+ xfer = generic_file_write(file, bufp, len, &off);
ip->i_mtime = save_mtime;
ip->i_ctime = save_ctime;
mark_inode_dirty(ip);
@@ -1177,7 +1168,7 @@ jfs_dm_rdwr(
error = (int)xfer;
}
- if (file.f_mode & FMODE_WRITE)
+ if (file->f_mode & FMODE_WRITE)
put_write_access(ip);
if (bCloseFile) {
/* Calling close_private_file results in calling jfs_release,
@@ -1189,8 +1180,7 @@ jfs_dm_rdwr(
atomic_dec(&bmap->db_active[ji->active_ag]);
ji->active_ag = -1;
}
- file.f_op->release = NULL;
- close_private_file(&file);
+ file->f_op->release = NULL;
}
dput(dentry);
return error;
@@ -3304,8 +3294,8 @@ STATIC fsys_function_vector_t jfs_fsys_v
int
jfs_dm_get_fsys_vector(
- struct inode *ip,
- caddr_t addr)
+ struct super_block *sb,
+ void *addr)
{
static int initialized = 0;
dm_fcntl_vector_t *vecrq;
@@ -3583,38 +3573,6 @@ static struct {
};
#endif
-void __init
-jfs_dm_init(void)
-{
-#ifdef CONFIG_COMPAT
- unsigned int i;
- int err;
-
- for (i = 0; i < ARRAY_SIZE(ioctl32_cmds); i++) {
- err = register_ioctl32_conversion(ioctl32_cmds[i].cmd, NULL);
- if (err >= 0)
- ioctl32_cmds[i].reg++;
- else
- printk(KERN_ERR "jfs_dm_init: unable to register ioctl %x, err = %d\n", ioctl32_cmds[i].cmd, err);
- }
-#endif
-}
-
-void __exit
-jfs_dm_exit(void)
-{
-#ifdef CONFIG_COMPAT
- unsigned int i;
-
- for (i = 0; i < ARRAY_SIZE(ioctl32_cmds); i++) {
- if (ioctl32_cmds[i].reg) {
- unregister_ioctl32_conversion(ioctl32_cmds[i].cmd);
- ioctl32_cmds[i].reg--;
- }
- }
-#endif
-}
-
/*
* jfs_iget - called by DMAPI to get inode from file handle
*/
@@ -3622,7 +3580,7 @@ int
jfs_iget(
struct super_block *sbp,
struct inode **ipp,
- fid_t *fidp)
+ struct dm_fsfid *fidp)
{
jfs_fid_t *jfid;
struct inode *ip;
@@ -3806,7 +3764,7 @@ jfs_dm_preunmount(struct super_block *sb
{
struct jfs_sb_info *sbi = JFS_SBI(sb);
- return JFS_SEND_NAMESP(DM_EVENT_PREUNMOUNT, sbi->dm_root,
+ return JFS_SEND_PREUNMOUNT(sb, sbi->dm_root,
DM_RIGHT_NULL, sbi->dm_root, DM_RIGHT_NULL,
NULL, NULL, 0, 0,
((sbi->dm_evmask & (1<<DM_EVENT_PREUNMOUNT)) ?
@@ -3838,3 +3796,86 @@ jfs_dm_umount_begin(struct super_block *
jfs_dm_preunmount(sb);
}
}
+
+static int
+jfs_dm_inode_to_fh(
+ struct inode *ip,
+ struct dm_fsfid *dmfsfid,
+ dm_fsid_t *dmfsid)
+{
+ struct jfs_fid fid;
+ struct jfs_sb_info *sbi = JFS_SBI(ip->i_sb);
+ unsigned long ino;
+
+ if (sbi->dm_fsid == 0)
+ return(-EINVAL);
+
+ fid.fid_len = sizeof(jfs_fid_t) - sizeof(fid.fid_len);
+ fid.fid_pad = 0;
+ fid.fid_gen = ip->i_generation;
+ ino = ip->i_ino;
+ memcpy(&fid.fid_ino, &ino, sizeof(fid.fid_ino));
+
+ memcpy(dmfsid, &sbi->dm_fsid, sizeof(*dmfsid));
+ memcpy(dmfsfid, &fid, sizeof(*dmfsfid));
+
+ return 0;
+}
+
+static void
+jfs_dm_get_fsid(
+ struct super_block *sb,
+ dm_fsid_t *fsid)
+{
+ struct jfs_sb_info *sbi = JFS_SBI(sb);
+
+ memcpy(fsid, &sbi->dm_fsid, sizeof(*fsid));
+}
+
+
+/*
+ * Filesystem operations accessed by the DMAPI core.
+ */
+struct filesystem_dmapi_operations jfs_dmapiops = {
+ .get_fsys_vector = jfs_dm_get_fsys_vector,
+ .fh_to_inode = jfs_iget,
+ .inode_to_fh = jfs_dm_inode_to_fh,
+ .get_fsid = jfs_dm_get_fsid,
+};
+
+void __init
+jfs_dm_init(
+ struct file_system_type *fstype)
+{
+ dmapi_register(fstype, &jfs_dmapiops);
+#ifdef CONFIG_COMPAT
+ unsigned int i;
+ int err;
+
+ for (i = 0; i < ARRAY_SIZE(ioctl32_cmds); i++) {
+ err = register_ioctl32_conversion(ioctl32_cmds[i].cmd, NULL);
+ if (err >= 0)
+ ioctl32_cmds[i].reg++;
+ else
+ printk(KERN_ERR "jfs_dm_init: unable to register ioctl %x, err = %d\n", ioctl32_cmds[i].cmd, err);
+ }
+#endif
+}
+
+void __exit
+jfs_dm_exit(
+ struct file_system_type *fstype)
+{
+ dmapi_unregister(fstype);
+#ifdef CONFIG_COMPAT
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(ioctl32_cmds); i++) {
+ if (ioctl32_cmds[i].reg) {
+ unregister_ioctl32_conversion(ioctl32_cmds[i].cmd);
+ ioctl32_cmds[i].reg--;
+ }
+ }
+#endif
+}
+
Index: bk-2.6-d/fs/jfs/dmapi/dmapi_jfs.h
===================================================================
--- bk-2.6-d.orig/fs/jfs/dmapi/dmapi_jfs.h 2004-09-03 12:35:05.139002706 -0500
+++ bk-2.6-d/fs/jfs/dmapi/dmapi_jfs.h 2004-09-03 12:35:06.044954506 -0500
@@ -16,9 +16,6 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include "sv.h"
-#include "spin.h"
-#include "kmem.h"
#include <asm/uaccess.h>
#include <linux/file.h>
#include <linux/fs.h>
@@ -85,12 +82,120 @@ typedef struct dm_attrs_s {
__u16 da_pad; /* DMIG extra padding */
} dm_attrs_t;
-int jfs_iget(
- struct super_block *sbp,
- struct inode **ipp,
- fid_t *fidp);
int jfs_dm_mount(struct super_block *sp);
int jfs_dm_preunmount(struct super_block *sp);
void jfs_dm_unmount(struct super_block *sp, int rc);
+
+#define DMATTR_PREFIXLEN 9
+
+/* Do you really want to allow the user to fiddle
+ * with the HSM's attributes?
+ */
+#define DMATTR_PREFIXSTRING "user.dmi."
+
+#define DMATTR_PERS_REGIONS "system.dmi.persistent.regions"
+
+/* events valid in dm_set_disp() when called with a filesystem handle. */
+
+#define DM_VALID_DISP_EVENTS ( \
+ (1 << DM_EVENT_PREUNMOUNT) | \
+ (1 << DM_EVENT_UNMOUNT) | \
+ (1 << DM_EVENT_NOSPACE) | \
+ (1 << DM_EVENT_CREATE) | \
+ (1 << DM_EVENT_POSTCREATE) | \
+ (1 << DM_EVENT_REMOVE) | \
+ (1 << DM_EVENT_POSTREMOVE) | \
+ (1 << DM_EVENT_RENAME) | \
+ (1 << DM_EVENT_POSTRENAME) | \
+ (1 << DM_EVENT_LINK) | \
+ (1 << DM_EVENT_POSTLINK) | \
+ (1 << DM_EVENT_SYMLINK) | \
+ (1 << DM_EVENT_POSTSYMLINK) | \
+ (1 << DM_EVENT_READ) | \
+ (1 << DM_EVENT_WRITE) | \
+ (1 << DM_EVENT_TRUNCATE) | \
+ (1 << DM_EVENT_ATTRIBUTE) | \
+ (1 << DM_EVENT_CLOSE) | \
+ (1 << DM_EVENT_DESTROY) )
+
+#define DM_JFS_VALID_FS_EVENTS ( \
+ (1 << DM_EVENT_PREUNMOUNT) | \
+ (1 << DM_EVENT_UNMOUNT) | \
+ (1 << DM_EVENT_NOSPACE) | \
+ (1 << DM_EVENT_CREATE) | \
+ (1 << DM_EVENT_POSTCREATE) | \
+ (1 << DM_EVENT_REMOVE) | \
+ (1 << DM_EVENT_POSTREMOVE) | \
+ (1 << DM_EVENT_RENAME) | \
+ (1 << DM_EVENT_POSTRENAME) | \
+ (1 << DM_EVENT_LINK) | \
+ (1 << DM_EVENT_POSTLINK) | \
+ (1 << DM_EVENT_SYMLINK) | \
+ (1 << DM_EVENT_POSTSYMLINK) | \
+ (1 << DM_EVENT_ATTRIBUTE) | \
+ (1 << DM_EVENT_CLOSE) | \
+ (1 << DM_EVENT_DESTROY) )
+
+/* Events valid in dm_set_eventlist() when called with a file handle for
+ a regular file or a symlink. These events are persistent.
+*/
+
+#define DM_JFS_VALID_FILE_EVENTS ( \
+ (1 << DM_EVENT_ATTRIBUTE) | \
+ (1 << DM_EVENT_CLOSE) | \
+ (1 << DM_EVENT_DESTROY) )
+
+/* Events valid in dm_set_region(). These events are persistent.
+*/
+
+#define DM_JFS_VALID_REGION_EVENTS ( \
+ (1 << DM_EVENT_READ) | \
+ (1 << DM_EVENT_WRITE) | \
+ (1 << DM_EVENT_TRUNCATE) )
+
+/* Events valid in dm_set_eventlist() when called with a file handle for
+ a directory. These events are persistent.
+*/
+
+#define DM_JFS_VALID_DIRECTORY_EVENTS ( \
+ (1 << DM_EVENT_CREATE) | \
+ (1 << DM_EVENT_POSTCREATE) | \
+ (1 << DM_EVENT_REMOVE) | \
+ (1 << DM_EVENT_POSTREMOVE) | \
+ (1 << DM_EVENT_RENAME) | \
+ (1 << DM_EVENT_POSTRENAME) | \
+ (1 << DM_EVENT_LINK) | \
+ (1 << DM_EVENT_POSTLINK) | \
+ (1 << DM_EVENT_SYMLINK) | \
+ (1 << DM_EVENT_POSTSYMLINK) | \
+ (1 << DM_EVENT_ATTRIBUTE) | \
+ (1 << DM_EVENT_CLOSE) | \
+ (1 << DM_EVENT_DESTROY) )
+
+/* Events supported by the JFS filesystem. */
+#define DM_JFS_SUPPORTED_EVENTS ( \
+ (1 << DM_EVENT_MOUNT) | \
+ (1 << DM_EVENT_PREUNMOUNT) | \
+ (1 << DM_EVENT_UNMOUNT) | \
+ (1 << DM_EVENT_NOSPACE) | \
+ (1 << DM_EVENT_CREATE) | \
+ (1 << DM_EVENT_POSTCREATE) | \
+ (1 << DM_EVENT_REMOVE) | \
+ (1 << DM_EVENT_POSTREMOVE) | \
+ (1 << DM_EVENT_RENAME) | \
+ (1 << DM_EVENT_POSTRENAME) | \
+ (1 << DM_EVENT_LINK) | \
+ (1 << DM_EVENT_POSTLINK) | \
+ (1 << DM_EVENT_SYMLINK) | \
+ (1 << DM_EVENT_POSTSYMLINK) | \
+ (1 << DM_EVENT_READ) | \
+ (1 << DM_EVENT_WRITE) | \
+ (1 << DM_EVENT_TRUNCATE) | \
+ (1 << DM_EVENT_ATTRIBUTE) | \
+ (1 << DM_EVENT_CLOSE) | \
+ (1 << DM_EVENT_DESTROY) | \
+ (1 << DM_EVENT_USER) )
+
+
#endif
Index: bk-2.6-d/fs/jfs/dmapi/dmapi_kern.h
===================================================================
--- bk-2.6-d.orig/fs/jfs/dmapi/dmapi_kern.h 2004-09-03 12:35:05.233997652 -0500
+++ bk-2.6-d/fs/jfs/dmapi/dmapi_kern.h 2004-09-03 12:35:06.046954400 -0500
@@ -1,3 +1,4 @@
+#error NOT HERE
/*
* Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved.
*
Index: bk-2.6-d/fs/jfs/dmapi/dmapi_private.h
===================================================================
--- bk-2.6-d.orig/fs/jfs/dmapi/dmapi_private.h 2004-09-03 12:35:05.329992544 -0500
+++ bk-2.6-d/fs/jfs/dmapi/dmapi_private.h 2004-09-03 12:35:06.049954240 -0500
@@ -1,3 +1,4 @@
+#error NOT HERE
/*
* Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved.
*
Index: bk-2.6-d/fs/jfs/dmapi/jfsdmapi.h
===================================================================
--- bk-2.6-d.orig/fs/jfs/dmapi/jfsdmapi.h 2004-09-03 12:35:05.425987437 -0500
+++ bk-2.6-d/fs/jfs/dmapi/jfsdmapi.h 2004-09-03 12:35:06.052954081 -0500
@@ -1,3 +1,4 @@
+#error NOT HERE
/*
* Copyright (c) 1995-2003 Silicon Graphics, Inc. All Rights Reserved.
*
Index: bk-2.6-d/fs/jfs/dmapi/sv.h
===================================================================
--- bk-2.6-d.orig/fs/jfs/dmapi/sv.h 2004-09-03 12:35:05.521982330 -0500
+++ bk-2.6-d/fs/jfs/dmapi/sv.h 2004-09-03 12:35:06.054953974 -0500
@@ -1,3 +1,4 @@
+#error NOT HERE
/*
* Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved.
* Portions Copyright (c) 2002 Christoph Hellwig. All Rights Reserved.
Index: bk-2.6-d/fs/jfs/jfs_dmapi.h
===================================================================
--- bk-2.6-d.orig/fs/jfs/jfs_dmapi.h 2004-09-03 12:35:05.617977223 -0500
+++ bk-2.6-d/fs/jfs/jfs_dmapi.h 2004-09-03 12:35:06.055953921 -0500
@@ -32,6 +32,9 @@
#ifndef __JFS_DMAPI_H__
#define __JFS_DMAPI_H__
+#include <dmapi.h>
+#include <dmapi_kern.h>
+
/* Values used to define the on-disk version of dm_attrname_t. All
* on-disk attribute names start with the 8-byte string "app.dmi.".
*
@@ -63,18 +66,12 @@
DM_FLAGS_NDELAY : 0)
-extern int dmapi_init(void);
-extern void dmapi_uninit(void);
+extern void jfs_dm_init(struct file_system_type *fstype);
+extern void jfs_dm_exit(struct file_system_type *fstype);
int jfs_dm_send_data_event(int, struct inode *,
dm_off_t, size_t, int, int /*vrwlock_t*/ *);
int jfs_dm_send_mmap_event(struct vm_area_struct *, unsigned int);
-int dm_send_destroy_event(struct inode *, dm_right_t);
-int dm_send_namesp_event(dm_eventtype_t, struct inode *,
- dm_right_t, struct inode *, dm_right_t,
- char *, char *, mode_t, int, int);
-void dm_send_unmount_event(struct super_block *, struct inode *,
- dm_right_t, mode_t, int, int);
#define JFS_SEND_DATA(ev,ip,off,len,fl,lock) \
jfs_dm_send_data_event(ev,ip,off,len,fl,lock)
@@ -83,7 +80,9 @@ void dm_send_unmount_event(struct super_
#define JFS_SEND_DESTROY(ip,right) \
dm_send_destroy_event(ip,right)
#define JFS_SEND_NAMESP(ev,i1,r1,i2,r2,n1,n2,mode,rval,fl) \
- dm_send_namesp_event(ev,i1,r1,i2,r2,n1,n2,mode,rval,fl)
+ dm_send_namesp_event(ev,NULL,i1,r1,i2,r2,n1,n2,mode,rval,fl)
+#define JFS_SEND_PREUNMOUNT(sb,i1,r1,i2,r2,n1,n2,mode,rval,fl) \
+ dm_send_namesp_event(DM_EVENT_PREUNMOUNT,sb,i1,r1,i2,r2,n1,n2,mode,rval,fl)
#define JFS_SEND_UNMOUNT(sbp,ip,right,mode,rval,fl) \
dm_send_unmount_event(sbp,ip,right,mode,rval,fl)
Index: bk-2.6-d/fs/jfs/jfs_incore.h
===================================================================
--- bk-2.6-d.orig/fs/jfs/jfs_incore.h 2004-09-03 11:56:29.312499402 -0500
+++ bk-2.6-d/fs/jfs/jfs_incore.h 2004-09-03 12:35:06.057953815 -0500
@@ -27,7 +27,7 @@
#include "jfs_dtree.h"
#ifdef CONFIG_JFS_DMAPI
#include "jfs_filsys.h"
-#include "dmapi/jfsdmapi.h" /* for dm_region_t */
+#include <dmapi.h> /* for dm_region_t */
#include "dmapi/dmapi_jfs.h" /* for dm_attrs_t */
#endif
Index: bk-2.6-d/fs/jfs/jfs_xtree.c
===================================================================
--- bk-2.6-d.orig/fs/jfs/jfs_xtree.c 2004-09-03 11:56:29.344497687 -0500
+++ bk-2.6-d/fs/jfs/jfs_xtree.c 2004-09-03 12:35:06.067953283 -0500
@@ -28,6 +28,7 @@
#include "jfs_dinode.h"
#include "jfs_superblock.h"
#include "jfs_debug.h"
+#include "dmapi/kmem.h"
/*
* xtree local flag
Index: bk-2.6-d/fs/jfs/super.c
===================================================================
--- bk-2.6-d.orig/fs/jfs/super.c 2004-09-03 11:56:29.356497044 -0500
+++ bk-2.6-d/fs/jfs/super.c 2004-09-03 12:35:06.071953070 -0500
@@ -766,11 +766,7 @@ static int __init init_jfs_fs(void)
#endif
#ifdef CONFIG_JFS_DMAPI
- rc = dmapi_init();
- if (rc) {
- jfs_err("init_jfs_fs: dmapi_init failed w/rc = %d", rc);
- goto kill_committask;
- }
+ jfs_dm_init(&jfs_fs_type);
#endif
return register_filesystem(&jfs_fs_type);
@@ -812,7 +808,7 @@ static void __exit exit_jfs_fs(void)
jfs_proc_clean();
#endif
#ifdef CONFIG_JFS_DMAPI
- dmapi_uninit();
+ jfs_dm_exit(&jfs_fs_type);
#endif
unregister_filesystem(&jfs_fs_type);
kmem_cache_destroy(jfs_inode_cachep);
Index: bk-2.6-d/fs/Kconfig
===================================================================
--- bk-2.6-d.orig/fs/Kconfig 2004-09-03 11:56:29.367496455 -0500
+++ bk-2.6-d/fs/Kconfig 2004-09-03 12:35:06.077952751 -0500
@@ -248,6 +248,7 @@ config REISERFS_FS_SECURITY
config JFS_FS
tristate "JFS filesystem support"
select NLS
+ select DMAPI if JFS_DMAPI
help
This is a port of IBM's Journaled Filesystem . More information is
available in the file Documentation/filesystems/jfs.txt.