[prev in list] [next in list] [prev in thread] [next in thread]
List: intermezzo-cvs
Subject: CVS: intermezzo/presto24 dcache.c,1.2,1.3 dir.c,1.19,1.20 journal.c,1.19,1.20 presto.c,1.4,1.5 super
From: Phil Schwan <pschwan () users ! sourceforge ! net>
Date: 2001-09-11 18:25:56
[Download RAW message or body]
Update of /cvsroot/intermezzo/intermezzo/presto24
In directory usw-pr-cvs1:/tmp/cvs-serv28924
Modified Files:
dcache.c dir.c journal.c presto.c super.c vfs.c
Log Message:
Overview:
- removed overloaded uses of dentry->d_fsdata and dentry->d_time
- added struct presto_dentry_data in their places
dcache.c:
- presto_d_release(): cleans up unused presto_dentry_datas
- presto_set_dd(): allocates or reuses a presto_dentry_data for the given
dentry
- presto_init_ddata_cache(): sets up the dentry_data slab at startup
- presto_cleanup_ddata_cache(): likewise at module cleanup time
dir.c:
- presto_lookup, presto_create, presto_link, presto_mkdir, presto_symlink,
presto_unlink, presto_rmdir, presto_mknod, presto_rename: call presto_prep()
on the parent dentry instead of the child
- presto_lookup(): call presto_set_dd() on new dentries
- presto_link(): disallow hard links between filesets
- presto_rename(): disallow renames between filesets
journal.c:
- replaced dentry->d_time with presto_d2d(dentry)->dd_kml_offset
presto.c:
- added presto_d2d() for accessing dentry->d_fsdata
- changed all uses of presto_dentry_is_fsetroot to presto_dentry2fset
- removed all overloaded uses of dentry->d_fsdata and fset->fset_data
- abstracted duplicated code into presto_cleanup_fset()
super.c:
- call presto_set_dd() on newly-created root dentry
- call presto_cleanup_ddata_cache() on module unload
vfs.c:
- replace some manual ops setting with presto_set_ops()
linux/intermezzo_fs.h:
- added presto_dentry_data and related prototypes
Index: dcache.c
===================================================================
RCS file: /cvsroot/intermezzo/intermezzo/presto24/dcache.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -U2 -r1.2 -r1.3
--- dcache.c 2001/06/10 07:52:28 1.2
+++ dcache.c 2001/09/11 18:25:54 1.3
@@ -16,4 +16,5 @@
#include <linux/errno.h>
#include <linux/locks.h>
+#include <linux/slab.h>
#include <asm/segment.h>
#include <asm/uaccess.h>
@@ -23,6 +24,6 @@
static int presto_dentry_revalidate(struct dentry *de, int );
+static kmem_cache_t * presto_dentry_slab;
-
/* called when a cache lookup succeeds */
static int presto_dentry_revalidate(struct dentry *de, int flag)
@@ -49,18 +50,87 @@
}
-static void presto_dentry_iput(struct dentry *dentry, struct inode *inode)
+static void presto_d_release(struct dentry *dentry)
{
- dentry->d_time = 0;
- iput(inode);
+ if (!presto_d2d(dentry)) {
+ printk("VERY BAD: dentry: %p\n", dentry);
+ if (dentry->d_inode)
+ printk(" inode: %ld\n", dentry->d_inode->i_ino);
+ return;
+ }
+
+ presto_d2d(dentry)->dd_count--;
+
+ if (! presto_d2d(dentry)->dd_count) {
+ kmem_cache_free(presto_dentry_slab, presto_d2d(dentry));
+ dentry->d_fsdata = NULL;
+ }
}
struct dentry_operations presto_dentry_ops =
{
- presto_dentry_revalidate, /* revalidate */
- NULL, /* hash */
- NULL, /* compare */
- NULL, /* delete */
- NULL, /* release */
- presto_dentry_iput /* iput */
+ d_revalidate: presto_dentry_revalidate,
+ d_release: presto_d_release
};
+
+// XXX THIS DEPENDS ON THE KERNEL LOCK!
+
+void presto_set_dd(struct dentry * dentry)
+{
+ ENTRY;
+ if (dentry->d_fsdata) {
+ printk("VERY BAD: dentry: %p\n", dentry);
+ if (dentry->d_inode)
+ printk(" inode: %ld\n", dentry->d_inode->i_ino);
+ return;
+ }
+
+ if (! dentry->d_inode) {
+ dentry->d_fsdata = kmem_cache_alloc(presto_dentry_slab,
+ SLAB_KERNEL);
+ memset(dentry->d_fsdata, 0, sizeof(struct presto_dentry_data));
+ presto_d2d(dentry)->dd_count = 1;
+ EXIT;
+ return;
+ }
+
+ /* If there's already a dentry for this inode, share the data */
+ if (dentry->d_alias.next != &dentry->d_inode->i_dentry ||
+ dentry->d_alias.prev != &dentry->d_inode->i_dentry) {
+ struct dentry *de;
+
+ if (dentry->d_alias.next != &dentry->d_inode->i_dentry)
+ de = list_entry(dentry->d_alias.next, struct dentry,
+ d_alias);
+ else
+ de = list_entry(dentry->d_alias.prev, struct dentry,
+ d_alias);
+
+ dentry->d_fsdata = de->d_fsdata;
+ presto_d2d(dentry)->dd_count++;
+ EXIT;
+ return;
+ }
+
+ dentry->d_fsdata = kmem_cache_alloc(presto_dentry_slab, SLAB_KERNEL);
+ memset(dentry->d_fsdata, 0, sizeof(struct presto_dentry_data));
+ presto_d2d(dentry)->dd_count = 1;
+ EXIT;
+ return;
+}
+
+void presto_init_ddata_cache(void)
+{
+ ENTRY;
+ presto_dentry_slab =
+ kmem_cache_create("presto_cache",
+ sizeof(struct presto_dentry_data), 0,
+ SLAB_HWCACHE_ALIGN|SLAB_POISON, NULL,
+ NULL);
+ EXIT;
+}
+
+void presto_cleanup_ddata_cache(void)
+{
+ kmem_cache_destroy(presto_dentry_slab);
+}
Index: dir.c
===================================================================
RCS file: /cvsroot/intermezzo/intermezzo/presto24/dir.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -U2 -r1.19 -r1.20
--- dir.c 2001/09/07 23:21:03 1.19
+++ dir.c 2001/09/11 18:25:54 1.20
@@ -190,5 +190,6 @@
cleanup_iput:
- if (inode) iput(inode);
+ if (inode)
+ iput(inode);
return ERR_PTR(error);
}
@@ -207,5 +208,6 @@
ENTRY;
- error = presto_prep(dentry, &cache, &fset);
+ CDEBUG(D_CACHE, "calling presto_prep on dentry %p\n", dentry);
+ error = presto_prep(dentry->d_parent, &cache, &fset);
if ( error ) {
EXIT;
@@ -235,6 +237,5 @@
de = iops->lookup(dir, dentry);
else {
- CDEBUG(D_CACHE, "iops %p lookup %p\n", iops,
- iops->lookup);
+ printk("filesystem has no lookup\n");
EXIT;
goto exit;
@@ -248,23 +249,10 @@
rc = PTR_ERR(de);
CDEBUG(D_CACHE, "dentry lookup error %d\n", rc);
+ EXIT;
+ goto exit;
}
-#if 0
- /* get all entries and attrs for a new directory */
- if (!ISLENTO(minor) && dentry->d_inode &&
- !rc && !presto_chk(dentry, PRESTO_DATA) &&
- S_ISDIR(dentry->d_inode->i_mode)) {
- rc = presto_opendir_upcall(minor, dentry,
- fset->fset_mtpt, SYNCHRONOUS);
- if ( rc == EISFSETROOT )
- presto_set(dentry, PRESTO_FSETROOT);
- /* XXX what do we do with other errors ? */
- CDEBUG(D_CACHE, "setting ATTR & DATA for %ld\n",
- dentry->d_inode->i_ino);
- presto_set(dentry, PRESTO_DATA | PRESTO_ATTR);
- } else if ( !rc || rc == -ENOENT ) {
- presto_set(dentry, PRESTO_ATTR);
- }
-#endif
+ presto_set_dd(dentry);
+
/* some file systems set the methods in lookup, not in
read_inode, as a result we should set the methods here
@@ -356,5 +344,5 @@
ENTRY;
- error = presto_prep(dentry, &cache, &fset);
+ error = presto_prep(dentry->d_parent, &cache, &fset);
if ( error ) {
EXIT;
@@ -390,6 +378,6 @@
{
int error;
- struct presto_cache *cache;
- struct presto_file_set *fset;
+ struct presto_cache *cache, *new_cache;
+ struct presto_file_set *fset, *new_fset;
struct dentry *parent = new_dentry->d_parent;
struct lento_vfs_context info;
@@ -402,4 +390,15 @@
}
+ error = presto_prep(new_dentry->d_parent, &new_cache, &new_fset);
+ if ( error ) {
+ EXIT;
+ return error;
+ }
+
+ if (fset != new_fset) {
+ EXIT;
+ return -EXDEV;
+ }
+
presto_unlock(dir);
if ( presto_get_permit(old_dentry->d_inode) < 0 ) {
@@ -440,5 +439,5 @@
ENTRY;
- error = presto_prep(dentry, &cache, &fset);
+ error = presto_prep(dentry->d_parent, &cache, &fset);
if ( error ) {
EXIT;
@@ -478,5 +477,5 @@
ENTRY;
- error = presto_prep(dentry, &cache, &fset);
+ error = presto_prep(dentry->d_parent, &cache, &fset);
if ( error ) {
EXIT;
@@ -512,5 +511,5 @@
ENTRY;
- error = presto_prep(dentry, &cache, &fset);
+ error = presto_prep(dentry->d_parent, &cache, &fset);
if ( error ) {
EXIT;
@@ -547,5 +546,5 @@
ENTRY;
CDEBUG(D_FILE, "prepping presto\n");
- error = presto_prep(dentry, &cache, &fset);
+ error = presto_prep(dentry->d_parent, &cache, &fset);
if ( error ) {
EXIT;
@@ -596,5 +595,5 @@
ENTRY;
- error = presto_prep(dentry, &cache, &fset);
+ error = presto_prep(dentry->d_parent, &cache, &fset);
if ( error ) {
EXIT;
@@ -696,10 +695,14 @@
double_down(&old_dir->i_zombie, &new_dir->i_zombie);
}
+
+
+// XXX this can be optimized: renamtes across filesets only require
+// multiple KML records, but can locally be executed normally.
int presto_rename(struct inode *old_dir, struct dentry *old_dentry,
struct inode *new_dir, struct dentry *new_dentry)
{
int error;
- struct presto_cache *cache;
- struct presto_file_set *fset;
+ struct presto_cache *cache, *new_cache;
+ struct presto_file_set *fset, *new_fset;
struct lento_vfs_context info;
struct dentry *old_parent = old_dentry->d_parent;
@@ -712,4 +715,14 @@
EXIT;
return error;
+ }
+ error = presto_prep(new_parent, &new_cache, &new_fset);
+ if ( error ) {
+ EXIT;
+ return error;
+ }
+
+ if ( fset != new_fset ) {
+ EXIT;
+ return -EXDEV;
}
Index: journal.c
===================================================================
RCS file: /cvsroot/intermezzo/intermezzo/presto24/journal.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -U2 -r1.19 -r1.20
--- journal.c 2001/09/07 23:21:03 1.19
+++ journal.c 2001/09/11 18:25:54 1.20
@@ -301,6 +301,7 @@
disable ths until version 1.2 */
if ( dentry ) {
- s.prevrec = cpu_to_le32(rec->offset - dentry->d_time);
- dentry->d_time = (unsigned long) rec->offset;
+ s.prevrec = cpu_to_le32(rec->offset -
+ presto_d2d(dentry)->dd_kml_offset);
+ presto_d2d(dentry)->dd_kml_offset = rec->offset;
} else {
s.prevrec = -1;
Index: presto.c
===================================================================
RCS file: /cvsroot/intermezzo/intermezzo/presto24/presto.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -U2 -r1.4 -r1.5
--- presto.c 2001/09/07 23:21:03 1.4
+++ presto.c 2001/09/11 18:25:54 1.5
@@ -51,14 +51,16 @@
}
-
-static inline int presto_dentry_is_fsetroot(struct dentry *dentry)
+inline struct presto_dentry_data *presto_d2d(struct dentry *dentry)
{
- return ((long) dentry->d_fsdata) & PRESTO_FSETROOT;
+ return (struct presto_dentry_data *)dentry->d_fsdata;
}
static inline struct presto_file_set *presto_dentry2fset(struct dentry *dentry)
{
- return (struct presto_file_set *)
- (((long) dentry->d_fsdata) - PRESTO_FSETROOT);
+ if (dentry->d_fsdata == NULL) {
+ printk("fucked dentry: %p\n", dentry);
+ BUG();
+ }
+ return presto_d2d(dentry)->dd_fset;
}
@@ -113,5 +115,5 @@
fsde = de;
for ( ; ; ) {
- if ( presto_dentry_is_fsetroot(fsde) ) {
+ if ( presto_dentry2fset(fsde) ) {
EXIT;
return presto_dentry2fset(fsde);
@@ -184,12 +186,6 @@
}
- /* if it is a fsetroot, it's stored in the fset_flags */
- if ( fset && presto_dentry_is_fsetroot(dentry) ) {
- EXIT;
- return fset->fset_data & flag;
- }
-
EXIT;
- return ((int)dentry->d_fsdata & flag);
+ return (presto_d2d(dentry)->dd_flags & flag);
}
@@ -198,20 +194,11 @@
{
+ ENTRY;
if ( dentry->d_inode ) {
CDEBUG(D_INODE, "SET ino %ld, flag %x\n",
dentry->d_inode->i_ino, flag);
- }
-
- if ( presto_dentry_is_fsetroot(dentry)) {
- struct presto_file_set *fset = presto_dentry2fset(dentry);
- if (fset) {
- fset->fset_data |= flag;
- CDEBUG(D_INODE, "Setting fset->fset_data: now %x\n",
- fset->fset_data);
- }
- } else {
- CDEBUG(D_INODE, "Setting dentry->d_fsdata\n");
- ((int)dentry->d_fsdata) |= flag;
}
+ presto_d2d(dentry)->dd_flags |= flag;
+ EXIT;
}
@@ -465,12 +452,12 @@
int error;
- CDEBUG(D_INODE, "name: %s, and flag %x, or flag %x\n",
- name, and_flag, or_flag);
-
error = presto_walk(name, &nd);
if (error)
return error;
dentry = nd.dentry;
- CDEBUG(D_INODE, "dentry at %p, d_fsdata %p\n", dentry, dentry->d_fsdata);
+
+ CDEBUG(D_INODE, "name: %s, and flag %x, or flag %x, dd_flags %x\n",
+ name, and_flag, or_flag, presto_d2d(dentry)->dd_flags);
+
error = -ENXIO;
@@ -479,23 +466,11 @@
error = 0;
- if ( presto_dentry_is_fsetroot(dentry) ) {
- struct presto_file_set *fset = presto_dentry2fset(dentry);
- CDEBUG(D_INODE, "Setting fset fset_data: fset %p\n", fset);
- if ( fset ) {
- fset->fset_data &= and_flag;
- fset->fset_data |= or_flag;
- if (res) {
- *res = fset->fset_data;
- }
- }
- CDEBUG(D_INODE, "fset %p, flags %x data %x\n",
- fset, fset->fset_flags, fset->fset_data);
- } else {
- ((int)dentry->d_fsdata) &= and_flag;
- ((int)dentry->d_fsdata) |= or_flag;
- if (res)
- *res = (int)dentry->d_fsdata;
- }
+ presto_d2d(dentry)->dd_flags &= and_flag;
+ presto_d2d(dentry)->dd_flags |= or_flag;
+ if (res)
+ *res = presto_d2d(dentry)->dd_flags;
+
+ // XXX this check makes no sense as d_count can change anytime.
/* indicate if we were the only users while changing the flag */
if ( atomic_read(&dentry->d_count) > 1 )
@@ -836,4 +811,5 @@
error = -EEXIST;
CDEBUG(D_INODE, "\n");
+
fset2 = presto_fset(dentry);
if (fset2 && (fset2->fset_mtpt == dentry) ) {
@@ -850,5 +826,5 @@
fset->fset_file_maxio = FSET_DEFAULT_MAX_FILEIO;
- dentry->d_fsdata = (void *) ( ((long)fset) + PRESTO_FSETROOT );
+ presto_d2d(dentry)->dd_fset = fset;
list_add(&fset->fset_list, &cache->cache_fset_list);
@@ -894,6 +870,6 @@
}
- CDEBUG(D_PIOCTL, "-------> fset at %p, dentry at %p, mtpt %p, fset %s, cache \
%p, d_fsdata %p\n",
- fset, dentry, fset->fset_mtpt, fset->fset_name, cache, \
dentry->d_fsdata); + CDEBUG(D_PIOCTL, "-------> fset at %p, dentry at %p, mtpt \
%p, fset %s, cache %p, presto_d2d(dentry)->dd_fset %p\n", + fset, \
dentry, fset->fset_mtpt, fset->fset_name, cache, presto_d2d(dentry)->dd_fset);
EXIT;
@@ -902,5 +878,5 @@
out_list_del:
list_del(&fset->fset_list);
- dentry->d_fsdata = 0;
+ presto_d2d(dentry)->dd_fset = NULL;
out_dput:
path_release(&fset->fset_nd);
@@ -932,5 +908,5 @@
error = -EINVAL;
- if ( ! presto_dentry_is_fsetroot(dentry)) {
+ if ( ! presto_dentry2fset(dentry)) {
EXIT;
goto kml_out;
@@ -950,4 +926,37 @@
}
+static void presto_cleanup_fset(struct presto_file_set *fset)
+{
+ int error;
+ struct presto_cache *cache;
+
+ ENTRY;
+#ifdef CONFIG_KREINT
+ error = kml_cleanup (fset);
+ if ( error ) {
+ printk("InterMezzo: Closing kml for fset %s: %d\n",
+ fset->fset_name, error);
+ }
+#endif
+
+ error = presto_close_journal_file(fset);
+ if ( error ) {
+ printk("InterMezzo: Closing journal for fset %s: %d\n",
+ fset->fset_name, error);
+ }
+ cache = fset->fset_cache;
+ cache->cache_flags &= ~CACHE_FSETROOT_SET;
+
+ list_del(&fset->fset_list);
+
+ presto_d2d(fset->fset_mtpt)->dd_fset = NULL;
+ path_release(&fset->fset_nd);
+
+ fset->fset_mtpt = NULL;
+ PRESTO_FREE(fset->fset_name, strlen(fset->fset_name) + 1);
+ PRESTO_FREE(fset, sizeof(*fset));
+ EXIT;
+}
+
int presto_clear_fsetroot(char *path)
{
@@ -955,5 +964,4 @@
struct presto_file_set *fset;
struct dentry *dentry;
- struct presto_cache *cache;
int error;
@@ -973,5 +981,5 @@
error = -EINVAL;
- if ( ! presto_dentry_is_fsetroot(dentry)) {
+ if ( ! presto_dentry2fset(dentry)) {
EXIT;
goto put_out;
@@ -984,26 +992,5 @@
}
-#ifdef CONFIG_KREINT
- error = kml_cleanup (fset);
- if ( error ) {
- printk("InterMezzo: Closing kml for fset %s: %d\n",
- fset->fset_name, error);
- }
-#endif
-
- error = presto_close_journal_file(fset);
- if ( error ) {
- printk("InterMezzo: Closing journal for fset %s: %d\n",
- fset->fset_name, error);
- }
- cache = fset->fset_cache;
- cache->cache_flags &= ~CACHE_FSETROOT_SET;
-
- list_del(&fset->fset_list);
- dentry->d_fsdata = 0;
- path_release(&fset->fset_nd);
- fset->fset_mtpt = NULL;
- PRESTO_FREE(fset->fset_name, strlen(fset->fset_name) + 1);
- PRESTO_FREE(fset, sizeof(*fset));
+ presto_cleanup_fset(fset);
EXIT;
@@ -1038,5 +1025,5 @@
error = -EINVAL;
- if ( ! presto_dentry_is_fsetroot(dentry)) {
+ if ( ! presto_dentry2fset(dentry)) {
EXIT;
goto put_out;
@@ -1050,5 +1037,4 @@
cache = fset->fset_cache;
- cache = fset->fset_cache;
cache->cache_flags &= ~CACHE_FSETROOT_SET;
@@ -1056,20 +1042,9 @@
tmpnext = tmp->next;
while ( tmpnext != &cache->cache_fset_list) {
- tmp=tmpnext;
- tmpnext=tmp->next;
+ tmp = tmpnext;
+ tmpnext = tmp->next;
fset = list_entry(tmp, struct presto_file_set, fset_list);
-
- error = presto_close_journal_file(fset);
- if ( error ) {
- printk("InterMezzo: Closing journal for fset %s: %d\n",
- fset->fset_name, error);
- }
- list_del(&fset->fset_list);
- fset->fset_mtpt->d_fsdata = 0;
- path_release(&fset->fset_nd);
- fset->fset_mtpt = NULL;
- PRESTO_FREE(fset->fset_name, strlen(fset->fset_name) +1);
- PRESTO_FREE(fset, sizeof(*fset));
+ presto_cleanup_fset(fset);
}
@@ -1104,5 +1079,5 @@
error = -EINVAL;
- if ( ! presto_dentry_is_fsetroot(dentry)) {
+ if ( ! presto_dentry2fset(dentry)) {
EXIT;
goto kml_out;
Index: super.c
===================================================================
RCS file: /cvsroot/intermezzo/intermezzo/presto24/super.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -U2 -r1.9 -r1.10
--- super.c 2001/08/15 17:02:12 1.9
+++ super.c 2001/09/11 18:25:54 1.10
@@ -320,5 +320,4 @@
}
-
cache->cache_sb = mysb;
ops = filter_get_filter_fs(cache_type);
@@ -349,4 +348,5 @@
presto_sb->s_root->d_op = filter_c2udops(cache->cache_filter);
cache->cache_mtde = mysb->s_root;
+ presto_set_dd(mysb->s_root);
}
@@ -482,4 +482,5 @@
presto_init_cache_hash();
+ presto_init_ddata_cache();
status = register_filesystem(&presto_fs_type);
@@ -513,5 +514,5 @@
presto_psdev_cleanup();
cleanup_intermezzo_sysctl();
-
+ presto_cleanup_ddata_cache();
#ifdef PRESTO_DEVEL
Index: vfs.c
===================================================================
RCS file: /cvsroot/intermezzo/intermezzo/presto24/vfs.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -U2 -r1.31 -r1.32
--- vfs.c 2001/09/07 23:21:03 1.31
+++ vfs.c 2001/09/11 18:25:54 1.32
@@ -506,15 +506,6 @@
struct presto_cache *cache = fset->fset_cache;
/* was this already done? */
- if ( !filter_c2cfiops(cache->cache_filter) )
- filter_setup_file_ops(cache->cache_filter,
- dentry->d_inode,
- &presto_file_iops,
- &presto_file_fops);
-
- /* make the new inode ours */
- dentry->d_inode->i_op =
- filter_c2ufiops(cache->cache_filter);
- dentry->d_inode->i_fop =
- filter_c2uffops(cache->cache_filter);
+ presto_set_ops(dentry->d_inode, cache->cache_filter);
+
filter_setup_dentry_ops(cache->cache_filter,
dentry->d_op,
@@ -1002,13 +993,6 @@
struct presto_cache *cache = fset->fset_cache;
- /* was this already done? */
- if ( !filter_c2csiops(cache->cache_filter) )
- filter_setup_symlink_ops(cache->cache_filter,
- dentry->d_inode,
- &presto_sym_iops,
- NULL);
+ presto_set_ops(dentry->d_inode, cache->cache_filter);
- /* make the new inode ours */
- dentry->d_inode->i_op = filter_c2usiops(cache->cache_filter);
filter_setup_dentry_ops(cache->cache_filter, dentry->d_op,
&presto_dentry_ops);
@@ -1171,6 +1155,7 @@
dentry->d_inode->i_gid != presto_excluded_gid) {
struct presto_cache *cache = fset->fset_cache;
- /* make it ours */
- dentry->d_inode->i_op = filter_c2udiops(cache->cache_filter);
+
+ presto_set_ops(dentry->d_inode, cache->cache_filter);
+
filter_setup_dentry_ops(cache->cache_filter,
dentry->d_op,
@@ -1473,6 +1458,7 @@
dentry->d_inode->i_gid != presto_excluded_gid) {
struct presto_cache *cache = fset->fset_cache;
- /* make it ours */
- dentry->d_inode->i_op = filter_c2udiops(cache->cache_filter);
+
+ presto_set_ops(dentry->d_inode, cache->cache_filter);
+
filter_setup_dentry_ops(cache->cache_filter, dentry->d_op,
&presto_dentry_ops);
_______________________________________________
intermezzo-commit mailing list
intermezzo-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/intermezzo-commit
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic