afs/fs/cachefs interface.c,1.7,1.8 index.c,1.19,1.20
cachetest-main.c,1.9,1.10 cachefs-int.h,1.34,1.35
dwh at infradead.org
dwh at infradead.org
Tue Jun 3 19:45:30 BST 2003
- Previous message: afs/fs/cachefs rootdir.c,1.10,1.11
- Next message: afs/fs/cachefs interface.c,1.8,1.9 inode.c,1.18,1.19
index.c,1.20,1.21 block.c,1.5,1.6 aops.c,1.31,1.32
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /home/cvs/afs/fs/cachefs
In directory phoenix.infradead.org:/tmp/cvs-serv23397/fs/cachefs
Modified Files:
interface.c index.c cachetest-main.c cachefs-int.h
Log Message:
make data retrieval work
Index: interface.c
===================================================================
RCS file: /home/cvs/afs/fs/cachefs/interface.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- interface.c 23 May 2003 14:07:31 -0000 1.7
+++ interface.c 3 Jun 2003 17:45:27 -0000 1.8
@@ -362,7 +362,7 @@
kdebug("found_parent_entry");
/* search the parent index for a reference compatible with this object */
- ret = cachefs_index_search(ipinode,cookie,&srch->ino);
+ ret = cachefs_index_search(ipinode,cookie,NULL,&srch->ino);
switch (ret) {
default:
goto error;
@@ -381,6 +381,11 @@
list_add_tail(&srch->link,&cookie->search_results);
list_add_tail(&inode->cookie_link,&cookie->backing_inodes);
atomic_inc(&cookie->usage);
+
+ spin_lock(&super->ino_list_lock);
+ list_add_tail(&inode->super_link,&super->ino_list);
+ spin_unlock(&super->ino_list_lock);
+
up(&inode->vfs_inode.i_sem);
break;
@@ -711,7 +716,8 @@
const struct cachefs_ondisc_fsdef *fsdef = entry;
struct cachefs_netfs *netfs = target;
- kenter("{%s.%u},{%s.%u}",
+ kenter("%p,%p",target,entry);
+ kdebug("{%s.%u},{%s.%u}",
netfs->name,netfs->version,
fsdef->name,fsdef->version);
@@ -783,7 +789,7 @@
/*
* handle a page having been read
*/
-static int cachefs_page_read(struct bio *bio, unsigned int bytes_done, int error)
+static int cachefs_page_read_endio(struct bio *bio, unsigned int bytes_done, int error)
{
struct cachefs_io_end *end_io = bio->bi_private;
struct bio_vec *bvec = bio->bi_io_vec + bio->bi_vcnt - 1;
@@ -806,7 +812,7 @@
bio_put(bio);
_leave(" = 0");
return 0;
-} /* end cachefs_page_read() */
+} /* end cachefs_page_read_endio() */
/*****************************************************************************/
/*
@@ -945,7 +951,7 @@
bio->bi_bdev = block->super->sb->s_bdev;
bio->bi_private = end_io;
- bio->bi_end_io = cachefs_page_read;
+ bio->bi_end_io = cachefs_page_read_endio;
bio->bi_sector = block->bix;
bio->bi_sector <<= PAGE_SHIFT - block->super->sb->s_blocksize_bits;
@@ -1003,7 +1009,8 @@
for (; bvec>=bio->bi_io_vec; bvec--)
end_io->func(end_io->cookie_data,bvec->bv_page,end_io->data);
- cachefs_vj_write_complete(end_io->block);
+ if (end_io->block->vjentry)
+ cachefs_vj_write_complete(end_io->block);
clear_bit(CACHEFS_BLOCK_NETFSBUSY,&end_io->block->flags);
wake_up(&end_io->block->writewq);
Index: index.c
===================================================================
RCS file: /home/cvs/afs/fs/cachefs/index.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- index.c 2 Jun 2003 09:17:42 -0000 1.19
+++ index.c 3 Jun 2003 17:45:27 -0000 1.20
@@ -33,7 +33,8 @@
struct cachefs_cookie *target;
struct cachefs_inode *iinode;
unsigned entsize;
- int entry;
+ unsigned ino;
+ unsigned entry;
};
/*****************************************************************************/
@@ -82,8 +83,9 @@
xent->state==CACHEFS_ONDISC_INDEX_RECYCLE)
continue;
- if (rec->index->idef->match(rec->index,xent->data)) {
+ if (rec->index->idef->match(rec->target->netfs_data,xent->data)) {
rec->entry = offset/tmp + page->index*(PAGE_SIZE/tmp);
+ rec->ino = xent->ino;
desc->count = 0;
ret = 0;
break;
@@ -104,11 +106,13 @@
/*
* search for the specified target object in an index in one cache
* - returns -ENOENT if not found
- * - returns 0 if found, and stores the entry number in *_entry
+ * - returns 0 if found, and stores the entry number in *_entry and the inode
+ * number of the backing file in *_ino
*/
int cachefs_index_search(struct cachefs_inode *index,
struct cachefs_cookie *target,
- unsigned *_entry)
+ unsigned *_entry,
+ unsigned *_ino)
{
struct cachefs_index_search_record rec;
struct file_ra_state ra;
@@ -118,13 +122,17 @@
kenter("{%s,%lu}",index->cookie->idef->name,index->vfs_inode.i_ino);
- *_entry = 0;
+ if (_entry)
+ *_entry = UINT_MAX;
+ if (_ino)
+ *_ino = 0;
rec.iinode = index;
rec.index = index->cookie;
rec.target = target;
- rec.entry = UINT_MAX;
rec.entsize = rec.iinode->index_esize;
+ rec.entry = UINT_MAX;
+ rec.ino = 0;
/* scan the file through the pagecache */
file_ra_state_init(&ra,rec.iinode->vfs_inode.i_mapping);
@@ -147,11 +155,14 @@
ret = -ENOENT;
}
else {
- *_entry = rec.entry;
+ if (_entry)
+ *_entry = rec.entry;
+ if (_ino)
+ *_ino = rec.ino;
ret = 0;
}
- kleave(" = %d [ent %u]",ret,*_entry);
+ kleave(" = %d [ent=%d ino=%u]",ret,rec.entry,rec.ino);
return ret;
} /* end cachefs_index_search() */
Index: cachetest-main.c
===================================================================
RCS file: /home/cvs/afs/fs/cachefs/cachetest-main.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- cachetest-main.c 23 May 2003 12:59:22 -0000 1.9
+++ cachetest-main.c 3 Jun 2003 17:45:27 -0000 1.10
@@ -247,7 +247,7 @@
*/
static cachefs_match_val_t cell_match(void *target, const void *entry)
{
- struct afs_cell *cell = container_of(target,struct afs_cell,cache);
+ struct afs_cell *cell = target;
kenter("");
@@ -263,7 +263,7 @@
*/
static void cell_update(void *source, void *entry)
{
- struct afs_cell *cell = container_of(source,struct afs_cell,cache);
+ struct afs_cell *cell = source;
kenter("%p,%p",source,entry);
@@ -277,7 +277,7 @@
*/
static cachefs_match_val_t vldb_match(void *target, const void *entry)
{
- struct afs_volume *volume = container_of(target,struct afs_volume,cache);
+ struct afs_volume *volume = target;
kenter("");
@@ -293,7 +293,7 @@
*/
static void vldb_update(void *source, void *entry)
{
- struct afs_volume *volume = container_of(source,struct afs_volume,cache);
+ struct afs_volume *volume = source;
kenter("%p,%p",source,entry);
@@ -307,7 +307,7 @@
*/
static cachefs_match_val_t file_match(void *target, const void *entry)
{
- struct afs_inode *inode = container_of(target,struct afs_inode,cache);
+ struct afs_inode *inode = target;
u_int32_t fid = htonl(inode->fid);
kenter("");
@@ -324,7 +324,7 @@
*/
static void file_update(void *source, void *entry)
{
- struct afs_inode *inode = container_of(source,struct afs_inode,cache);
+ struct afs_inode *inode = source;
u_int32_t fid = htonl(inode->fid);
kenter("%p,%p",source,entry);
Index: cachefs-int.h
===================================================================
RCS file: /home/cvs/afs/fs/cachefs/cachefs-int.h,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- cachefs-int.h 2 Jun 2003 09:17:42 -0000 1.34
+++ cachefs-int.h 3 Jun 2003 17:45:27 -0000 1.35
@@ -295,7 +295,6 @@
{
if (block) {
int usage = atomic_read(&block->usage);
- /*kenter(",{bix=%u u=%d",block->bix,atomic_read(&block->usage));*/
if ((usage&0xffffff00)==0x6b6b6b00) {
printk("\ncachefs_block_put(%p{u=%d})\n",block,usage);
@@ -442,7 +441,8 @@
extern int cachefs_index_search(struct cachefs_inode *index,
struct cachefs_cookie *target,
- unsigned *_entry);
+ unsigned *_entry,
+ unsigned *_ino);
extern int cachefs_index_add(struct cachefs_inode *index,
struct cachefs_cookie *cookie,
- Previous message: afs/fs/cachefs rootdir.c,1.10,1.11
- Next message: afs/fs/cachefs interface.c,1.8,1.9 inode.c,1.18,1.19
index.c,1.20,1.21 block.c,1.5,1.6 aops.c,1.31,1.32
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the linux-afs-cvs
mailing list