From: alebre <al...@us...> - 2010-03-30 21:20:48
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "kdfs". The branch, make_kdfs_compile has been updated via 115803bcadc1f6bdffe6568a04ab76db941a71a7 (commit) via f7ea1dbc1e78e2f0cbc9326ee2e15c675974cef1 (commit) via 4851fdab0c827115c2dba01f90750fcf969dccef (commit) via e62164617eb03c6fdc8104426f7001470875ad21 (commit) via d52c6ffb65d4e42b13857f635adb293d7eeecf37 (commit) via 156d6a6f636830f2b175ea7be317bd32ac113420 (commit) via 77352c38128e22827b8991884a8cbb80684e4e4f (commit) from c43d260de5f117c8a4f258959c57794fa5cbe593 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 115803bcadc1f6bdffe6568a04ab76db941a71a7 Author: ad <leb...@fr...> Date: Tue Mar 30 21:52:10 2010 +0000 [MINOR] add kdfs_distmark_dirty (forgot it), the code is still not ok diff --git a/fs/kdfs/address_space.c b/fs/kdfs/address_space.c index 7d73f12..2cb373c 100644 --- a/fs/kdfs/address_space.c +++ b/fs/kdfs/address_space.c @@ -198,7 +198,8 @@ int __kdfs_commit_write(struct file *file, * However, due to the write behind issue at such a distributed level, we have * chosen to directly call the kDDM sync functions (write through) */ - kdfs_mark_page_dirty(k_inode->content_setid, page->index); +// kdfs_mark_page_dirty(k_inode->content_setid, page->index); + kdfs_distmark_page_dirty(k_inode, page->index); __kdfs_put_page(k_inode->content_setid, page->index); kdfs_mark_inode_dirty(k_inode); @@ -360,6 +361,14 @@ void _kdfs_put_page(struct kdfs_page *k_page) kddm_put_object(kddm_def_ns, k_page->set_id, k_page->obj_id); } +void kdfs_distmark_page_dirty(struct kdfs_inode *k_inode, pgoff_t page_id){ + DEBUG(DBG_INFO, "Gonna sync page %ld from set %ld\n", page_id, k_inode->content_setid); + kdfs_mark_page_dirty(k_inode->content_setid, + pageindex_to_contentobjid( + kdfs_file_extent_get_page_owner(k_inode, page_id),page_id)); +} + + void kdfs_mark_page_dirty(kddm_set_id_t set_id, objid_t obj_id) { DEBUG(DBG_INFO, "Sync object %ld from set %lu\n", obj_id, set_id); diff --git a/fs/kdfs/address_space.h b/fs/kdfs/address_space.h index 2a1b26c..73e6e01 100644 --- a/fs/kdfs/address_space.h +++ b/fs/kdfs/address_space.h @@ -129,6 +129,7 @@ void _kdfs_put_page(struct kdfs_page *k_page); void __kdfs_put_page(kddm_set_id_t set_id, objid_t obj_id); +void kdfs_distmark_page_dirty(struct kdfs_inode *k_inode, pgoff_t page_id); void kdfs_mark_page_dirty(kddm_set_id_t set_id, objid_t obj_id); int kdfs_iol_page_alloc(kddm_obj_t *objEntry, kddm_set_t *set, objid_t objid); commit f7ea1dbc1e78e2f0cbc9326ee2e15c675974cef1 Author: ad <leb...@fr...> Date: Tue Mar 30 18:40:02 2010 +0000 [MINOR] some progress toward the solution....(WARNING: compilation ok, execution needs to be deeply tested diff --git a/fs/kdfs/address_space.c b/fs/kdfs/address_space.c index 3008ddf..7d73f12 100644 --- a/fs/kdfs/address_space.c +++ b/fs/kdfs/address_space.c @@ -86,7 +86,7 @@ int kdfs_readpage(struct file *file, struct page *page) /* TODO PRIORITY 2: test kdfs_get_page returned value */ // k_page = kdfs_get_page(k_inode->content_setid,page->index); - k_page = kdfs_get_distpage(k_inode->content_setid,page->index); + k_page = kdfs_get_distpage(k_inode,page->index); DEBUG(DBG_INFO, " Readpage k_page->page : %p and page %p\n", k_page->page, page); BUG_ON(k_page->page != page); @@ -116,7 +116,7 @@ int __kdfs_prepare_write (struct file *file, struct page *page, struct kdfs_page *k_page = NULL; struct kdfs_inode *k_inode = NULL; - DEBUG (DBG_INFO, "begin_write for file %s (ino %ld), page %ld from %d to %d (count = %d, mapping = %p)\n", + DEBUG (DBG_INFO, "prepare_write for file %s (ino %ld), page %ld from %d to %d (count = %d, mapping = %p)\n", file->f_dentry->d_name.name, file->f_dentry->d_inode->i_ino, page->index, offset, _to, page_count(page), page->mapping); BUG_ON (page->mapping == NULL); @@ -128,7 +128,7 @@ int __kdfs_prepare_write (struct file *file, struct page *page, } /* TODO PRIORITY 2: test kdfs_grab_page returned value */ - k_page = kdfs_grab_distpage(k_inode->content_setid, page->index); + k_page = kdfs_grab_distpage(k_inode, page->index); BUG_ON(k_page->page != page) ; k_page->offset = offset; k_page->to = _to; @@ -263,9 +263,10 @@ void kdfs_invalidatepage(struct page *page, unsigned long offset) else { //TODO Now Adrien : Fix that : sure or not sure ? /* Not sure about this */ - kdfs_grab_distpage(k_page->set_id, k_page->obj_id); - kddm_sync_frozen_object(kddm_def_ns, k_page->set_id, k_page->obj_id); - __kdfs_put_page(k_page->set_id, k_page->obj_id); + ASSERT (1==0); + // kdfs_grab_distpage(k_page->set_id, k_page->obj_id); + // kddm_sync_frozen_object(kddm_def_ns, k_page->set_id, k_page->obj_id); +// __kdfs_put_page(k_page->set_id, k_page->obj_id); } PRINT_FUNCTION_EXIT; } @@ -284,19 +285,8 @@ int kdfs_releasepage(struct page *page, gfp_t mask) PRINT_FUNCTION_NAME; k_page = (struct kdfs_page *) page->private; - associated_set = _find_get_kddm_set(kddm_def_ns, k_page->set_id); - obj_entry = __get_kddm_obj_entry(associated_set, k_page->obj_id); - if (OBJ_EXCLUSIVE2(COPYSET(obj_entry))) { - put_kddm_obj_entry(associated_set, obj_entry, k_page->obj_id); - put_kddm_set(associated_set); - kdfs_grab_distpage(k_page->set_id, k_page->obj_id); - kddm_remove_frozen_object(kddm_def_ns, k_page->set_id, k_page->obj_id); - } - else { - put_kddm_obj_entry(associated_set, obj_entry, k_page->obj_id); - put_kddm_set(associated_set); - kddm_flush_object(kddm_def_ns, k_page->set_id, k_page->obj_id, KERRIGHED_NODE_ID_NONE); - } + + kddm_flush_object(kddm_def_ns, k_page->set_id, k_page->obj_id, KERRIGHED_NODE_ID_NONE); ClearPagePrivate(page); PRINT_FUNCTION_EXIT; @@ -321,13 +311,11 @@ struct address_space_operations kdfs_aops = { // TODO NOW - Adrien, PROC functions, kdfs_ilocalfind is already called before kdfs_get/grab page. // I did that just to be faster, will improve that later if the code runs ;) -struct kdfs_page *kdfs_get_distpage(kddm_set_id_t set_id, pgoff_t page_id){ - DEBUG(DBG_INFO, "Get page %ld from set %ld\n", page_id, set_id); - struct kdfs_inode *k_inode = kdfs_ilocalfind(set_id); +struct kdfs_page *kdfs_get_distpage(struct kdfs_inode *k_inode, pgoff_t page_id){ + DEBUG(DBG_INFO, "Get page %ld from set %ld\n", page_id, k_inode->content_setid); struct kdfs_page *k_page =kdfs_get_page(k_inode->content_setid, pageindex_to_contentobjid( kdfs_file_extent_get_page_owner(k_inode, page_id),page_id)); - kdfs_iput(k_inode->inode->i_ino); return k_page; } @@ -338,13 +326,11 @@ struct kdfs_page *kdfs_get_page(kddm_set_id_t set_id, objid_t obj_id) return kddm_get_object(kddm_def_ns, set_id, obj_id); } -struct kdfs_page *kdfs_grab_distpage(kddm_set_id_t set_id, pgoff_t page_id){ - DEBUG(DBG_INFO, "Grab page %ld from set %ld\n", page_id, set_id); - struct kdfs_inode *k_inode = kdfs_ilocalfind(set_id); +struct kdfs_page *kdfs_grab_distpage(struct kdfs_inode *k_inode, pgoff_t page_id){ + DEBUG(DBG_INFO, "Gonna grab page %ld from set %ld\n", page_id, k_inode->content_setid); struct kdfs_page *k_page =kdfs_grab_page(k_inode->content_setid, pageindex_to_contentobjid( kdfs_file_extent_get_page_owner(k_inode, page_id),page_id)); - kdfs_iput(k_inode->inode->i_ino); return k_page; } diff --git a/fs/kdfs/address_space.h b/fs/kdfs/address_space.h index 939a9a7..2a1b26c 100644 --- a/fs/kdfs/address_space.h +++ b/fs/kdfs/address_space.h @@ -104,7 +104,7 @@ struct kdfs_page { // Return the node in charge of storing the kddm object // Used in default_owner for the content I/O linker static inline kerrighed_node_t page_linked_node(objid_t objid){ - return objid%KDFS_MAX_NO_NODES; + return (objid%KDFS_MAX_NO_NODES) + 1; } static inline objid_t pageindex_to_contentobjid(kerrighed_node_t nodeid, pgoff_t pageid) @@ -119,9 +119,9 @@ static inline pgoff_t contentobjid_to_pageindex(kerrighed_node_t nodeid, objid_t } -struct kdfs_page *kdfs_get_distpage(kddm_set_id_t set_id, objid_t obj_id); +struct kdfs_page *kdfs_get_distpage(struct kdfs_inode *k_inode, objid_t obj_id); struct kdfs_page *kdfs_get_page(kddm_set_id_t set_id, objid_t obj_id); -struct kdfs_page *kdfs_grab_distpage(kddm_set_id_t set_id, objid_t obj_id); +struct kdfs_page *kdfs_grab_distpage(struct kdfs_inode *k_inode, objid_t obj_id); struct kdfs_page *kdfs_grab_page(kddm_set_id_t set_id, objid_t obj_id); struct kdfs_page *kdfs_findlocal_page(kddm_set_id_t set_id, objid_t obj_id); diff --git a/fs/kdfs/file_extent.c b/fs/kdfs/file_extent.c index 49fd1ba..9ed5519 100644 --- a/fs/kdfs/file_extent.c +++ b/fs/kdfs/file_extent.c @@ -44,6 +44,8 @@ int kdfs_file_extent_find(struct list_head *extents, pgoff_t page_no, struct kdf *ext_before = *ext_in = *ext_after = NULL; + ASSERT(extents!=NULL); + if (list_empty(extents)) { return 1; } @@ -196,6 +198,7 @@ kdfs_node_t kdfs_file_extent_get_page_owner(struct kdfs_inode *k_inode, pgoff_t { struct kdfs_file_extent *extent_before, *extent_in, *extent_after; + DEBUG(DBG_INFO, "Try to access the extent of ino : %ld\n",k_inode->inode->i_ino); kdfs_file_extent_find(&k_inode->extents_list, page_no, &extent_before, &extent_in, &extent_after); if (extent_in) { commit 4851fdab0c827115c2dba01f90750fcf969dccef Merge: e621646 c43d260 Author: ad <leb...@fr...> Date: Tue Mar 30 12:54:17 2010 +0000 Merge branch 'make_kdfs_compile' of ssh://kdfs.git.sourceforge.net/gitroot/kdfs/kernel into make_kdfs_compile commit e62164617eb03c6fdc8104426f7001470875ad21 Author: ad <leb...@fr...> Date: Tue Mar 30 12:13:21 2010 +0000 [MAJOR] add hashing code for the striping policy (WARNING: THIS CODE HAS NOT BEEN TESTED) diff --git a/fs/kdfs/address_space.c b/fs/kdfs/address_space.c index 62d64fb..3008ddf 100644 --- a/fs/kdfs/address_space.c +++ b/fs/kdfs/address_space.c @@ -9,6 +9,7 @@ * @maintainer Adrien Lebre * * Copyright (C) 2006-2007, XtreemOS Consortium. + * Copyright (C) 2008-20xx, Mines Nantes - INRIA Rennes Bretagne Atlantique - LINA . */ #include <linux/pagemap.h> @@ -84,7 +85,8 @@ int kdfs_readpage(struct file *file, struct page *page) k_inode->inode->i_ino, list_entry(k_inode->inode->i_dentry.next, struct dentry, d_alias)->d_name.name); /* TODO PRIORITY 2: test kdfs_get_page returned value */ - k_page = kdfs_get_page(k_inode->content_setid, page->index); +// k_page = kdfs_get_page(k_inode->content_setid,page->index); + k_page = kdfs_get_distpage(k_inode->content_setid,page->index); DEBUG(DBG_INFO, " Readpage k_page->page : %p and page %p\n", k_page->page, page); BUG_ON(k_page->page != page); @@ -125,8 +127,8 @@ int __kdfs_prepare_write (struct file *file, struct page *page, DEBUG (DBG_PANIC, "No contentset associated.... looks really strange \n"); } - /* TODO PRIORITY 2: test kdfs_get_page returned value */ - k_page = kdfs_grab_page(k_inode->content_setid, page->index); + /* TODO PRIORITY 2: test kdfs_grab_page returned value */ + k_page = kdfs_grab_distpage(k_inode->content_setid, page->index); BUG_ON(k_page->page != page) ; k_page->offset = offset; k_page->to = _to; @@ -259,8 +261,9 @@ void kdfs_invalidatepage(struct page *page, unsigned long offset) ClearPagePrivate(page); } else { + //TODO Now Adrien : Fix that : sure or not sure ? /* Not sure about this */ - kdfs_grab_page(k_page->set_id, k_page->obj_id); + kdfs_grab_distpage(k_page->set_id, k_page->obj_id); kddm_sync_frozen_object(kddm_def_ns, k_page->set_id, k_page->obj_id); __kdfs_put_page(k_page->set_id, k_page->obj_id); } @@ -286,7 +289,7 @@ int kdfs_releasepage(struct page *page, gfp_t mask) if (OBJ_EXCLUSIVE2(COPYSET(obj_entry))) { put_kddm_obj_entry(associated_set, obj_entry, k_page->obj_id); put_kddm_set(associated_set); - kdfs_grab_page(k_page->set_id, k_page->obj_id); + kdfs_grab_distpage(k_page->set_id, k_page->obj_id); kddm_remove_frozen_object(kddm_def_ns, k_page->set_id, k_page->obj_id); } else { @@ -315,27 +318,48 @@ struct address_space_operations kdfs_aops = { /* ADDRESS SPACE LINKER PART */ /* */ /*****************************************************************************/ -// struct kdfs_inode *k_inode = kdfs_ilocalfind(my_data->ino); -// ret_val = kdfs_file_extent_get_page_owner(k_inode, objid); -// kdfs_iput(k_inode->inode->i_ino); - +// TODO NOW - Adrien, PROC functions, kdfs_ilocalfind is already called before kdfs_get/grab page. +// I did that just to be faster, will improve that later if the code runs ;) +struct kdfs_page *kdfs_get_distpage(kddm_set_id_t set_id, pgoff_t page_id){ + DEBUG(DBG_INFO, "Get page %ld from set %ld\n", page_id, set_id); + struct kdfs_inode *k_inode = kdfs_ilocalfind(set_id); + struct kdfs_page *k_page =kdfs_get_page(k_inode->content_setid, + pageindex_to_contentobjid( + kdfs_file_extent_get_page_owner(k_inode, page_id),page_id)); + kdfs_iput(k_inode->inode->i_ino); + return k_page; +} + struct kdfs_page *kdfs_get_page(kddm_set_id_t set_id, objid_t obj_id) { - DEBUG(DBG_INFO, "Get page %ld from set %ld\n", obj_id, set_id); + DEBUG(DBG_INFO, "Get object %ld from set %ld\n", obj_id, set_id); return kddm_get_object(kddm_def_ns, set_id, obj_id); } +struct kdfs_page *kdfs_grab_distpage(kddm_set_id_t set_id, pgoff_t page_id){ + DEBUG(DBG_INFO, "Grab page %ld from set %ld\n", page_id, set_id); + struct kdfs_inode *k_inode = kdfs_ilocalfind(set_id); + struct kdfs_page *k_page =kdfs_grab_page(k_inode->content_setid, + pageindex_to_contentobjid( + kdfs_file_extent_get_page_owner(k_inode, page_id),page_id)); + kdfs_iput(k_inode->inode->i_ino); + return k_page; +} + + struct kdfs_page *kdfs_grab_page(kddm_set_id_t set_id, objid_t obj_id) { - DEBUG(DBG_INFO, "Grab page %ld from set %ld\n", obj_id, set_id); + + DEBUG(DBG_INFO, "Grab object %ld from set %ld\n", obj_id, set_id); + return kddm_grab_object(kddm_def_ns, set_id, obj_id); } struct kdfs_page *kdfs_findlocal_page(kddm_set_id_t set_id, objid_t obj_id) { - DEBUG(DBG_INFO, "Grab page %ld from set %ld\n", obj_id, set_id); + DEBUG(DBG_INFO, "Grab object %ld from set %ld\n", obj_id, set_id); return kddm_find_object(kddm_def_ns, set_id, obj_id); } @@ -346,13 +370,13 @@ void __kdfs_put_page(kddm_set_id_t set_id, objid_t obj_id) void _kdfs_put_page(struct kdfs_page *k_page) { - DEBUG(DBG_INFO, "Put page %ld from set %ld\n", k_page->obj_id, k_page->set_id); + DEBUG(DBG_INFO, "Put object %ld from set %ld\n", k_page->obj_id, k_page->set_id); kddm_put_object(kddm_def_ns, k_page->set_id, k_page->obj_id); } void kdfs_mark_page_dirty(kddm_set_id_t set_id, objid_t obj_id) { - DEBUG(DBG_INFO, "Sync page %ld from set %lu\n", obj_id, set_id); + DEBUG(DBG_INFO, "Sync object %ld from set %lu\n", obj_id, set_id); kddm_sync_frozen_object(kddm_def_ns, set_id, obj_id); } diff --git a/fs/kdfs/address_space.h b/fs/kdfs/address_space.h index aab2433..939a9a7 100644 --- a/fs/kdfs/address_space.h +++ b/fs/kdfs/address_space.h @@ -9,7 +9,7 @@ * @maintainer Adrien Lebre * * Copyright (C) 2006-2007, XtreemOS Consortium. - * Copyright (C) 2008-20xx, XtreemOS Consortium, Ascola Research Group. + * Copyright (C) 2008-20xx, Mines Nantes - INRIA Rennes Bretagne Atlantique - LINA . */ #ifndef __KDFS_ADDR_SPACE__ @@ -48,7 +48,7 @@ struct kdfs_meta { struct content_iolinker_data { ino_t ino; /* inode id */ - + /* * Reference to the associated adress_space structure required to * manipulate page cache. @@ -101,8 +101,27 @@ struct kdfs_page { * PROTOTYPES * * * *--------------------------------------------------------------------------*/ +// Return the node in charge of storing the kddm object +// Used in default_owner for the content I/O linker +static inline kerrighed_node_t page_linked_node(objid_t objid){ + return objid%KDFS_MAX_NO_NODES; +} + +static inline objid_t pageindex_to_contentobjid(kerrighed_node_t nodeid, pgoff_t pageid) +{ + return pageid*KDFS_MAX_NO_NODES + nodeid - 1; + +} + +static inline pgoff_t contentobjid_to_pageindex(kerrighed_node_t nodeid, objid_t objid) +{ + return (objid-nodeid+1)/KDFS_MAX_NO_NODES; +} + +struct kdfs_page *kdfs_get_distpage(kddm_set_id_t set_id, objid_t obj_id); struct kdfs_page *kdfs_get_page(kddm_set_id_t set_id, objid_t obj_id); +struct kdfs_page *kdfs_grab_distpage(kddm_set_id_t set_id, objid_t obj_id); struct kdfs_page *kdfs_grab_page(kddm_set_id_t set_id, objid_t obj_id); struct kdfs_page *kdfs_findlocal_page(kddm_set_id_t set_id, objid_t obj_id); diff --git a/fs/kdfs/common.h b/fs/kdfs/common.h index cba32d0..c087bc2 100644 --- a/fs/kdfs/common.h +++ b/fs/kdfs/common.h @@ -6,7 +6,7 @@ * @author Marko Obrovac (2010-xxxx) * * Copyright (C) 2006-2007, XtreemOS Consortium. - * Copyright (C) 2008-20xx, XtreemOS Consortium, Ascola Research Group. + * Copyright (C) 2008-20xx, Mines Nantes - INRIA Rennes Bretagne Atlantique - LINA . */ #ifndef __KDFS_COMMON__ @@ -18,6 +18,10 @@ #include <kddm/kddm.h> +#define KDFS_MIN_NODEID 0 +#define KDFS_MAX_NODEID 255 +#define KDFS_MAX_NO_NODES ((KDFS_MAX_NODEID) - (KDFS_MIN_NODEID) + 1) + /* Max number of extent records that fit in a kddm object */ /* if you change the kdfs_netinode or kdfs_file_extent_info @@ -113,4 +117,5 @@ struct kdfs_physical_inode { }; + #endif diff --git a/fs/kdfs/file.c b/fs/kdfs/file.c index 13339bb..70de1ec 100644 --- a/fs/kdfs/file.c +++ b/fs/kdfs/file.c @@ -9,6 +9,7 @@ * @maintainer Adrien Lebre * * Copyright (C) 2006-2007, XtreemOS Consortium. + * Copyright (C) 2008-20xx, Mines Nantes - INRIA Rennes Bretagne Atlantique - LINA . */ #include <linux/buffer_head.h> @@ -258,15 +259,12 @@ kerrighed_node_t kdfs_iol_file_default_owner (kddm_set_t *kddm_set, int nr_nodes) { kerrighed_node_t ret_val; - // TODO Now : Adrien, the following line is obsolete right now - struct content_iolinker_data *my_data = (struct content_iolinker_data *)kddm_set->private_data; // check who's the default owner of the object !!! ret_val = page_linked_node(objid); DEBUG(DBG_INFO, "######### /\\/\\/\\/ page owner ::: %d\n", ret_val); return ret_val; - //return 2; } /* diff --git a/fs/kdfs/file_extent.c b/fs/kdfs/file_extent.c index 74f0af8..0eb2355 100644 --- a/fs/kdfs/file_extent.c +++ b/fs/kdfs/file_extent.c @@ -60,7 +60,6 @@ int kdfs_file_extent_find(struct list_head *extents, pgoff_t page_no, struct kdf *ext_before = curr; } } - return 1; } diff --git a/fs/kdfs/file_extent.h b/fs/kdfs/file_extent.h index 1597a5e..6b2ea31 100644 --- a/fs/kdfs/file_extent.h +++ b/fs/kdfs/file_extent.h @@ -6,7 +6,7 @@ * @author Marko Obrovac (2010-xxxx) * * Copyright (C) 2006-2007, XtreemOS Consortium. - * Copyright (C) 2008-20xx, XtreemOS Consortium, Ascola Research Group. + * Copyright (C) 2008-20xx, Mines Nantes - INRIA Rennes Bretagne Atlantique - LINA . */ #ifndef __KDFS_FILE_EXTENT__ diff --git a/fs/kdfs/inode.h b/fs/kdfs/inode.h index 1581ef5..fd33d86 100644 --- a/fs/kdfs/inode.h +++ b/fs/kdfs/inode.h @@ -9,6 +9,7 @@ * @maintainer Adrien Lebre * * Copyright (C) 2006-2007, XtreemOS Consortium. + * Copyright (C) 2008-20xx, Mines Nantes - INRIA Rennes Bretagne Atlantique - LINA . */ #ifndef __KDFS_INODE__ diff --git a/fs/kdfs/super.h b/fs/kdfs/super.h index 38c9efc..fb32ada 100644 --- a/fs/kdfs/super.h +++ b/fs/kdfs/super.h @@ -9,6 +9,7 @@ * @maintainer Adrien Lebre * * Copyright (C) 2006-2007, XtreemOS Consortium. + * Copyright (C) 2008-20xx, Mines Nantes - INRIA Rennes Bretagne Atlantique - LINA . */ #ifndef __KDFS_SUPER__ @@ -18,11 +19,8 @@ #include <asm/page.h> #include <linux/statfs.h> - - #include "common.h" - /*--------------------------------------------------------------------------* * * * MACROS * @@ -43,9 +41,6 @@ #define KDFS_COMPUTE_ROOT_INODEID(kdfs_sb)\ ((kdfs_sb->root_nodeid << 24) + KDFS_ROOT_INODEID) -#define KDFS_MIN_NODEID 0 -#define KDFS_MAX_NODEID 255 -#define KDFS_MAX_NO_NODES ((KDFS_MAX_NODEID) - (KDFS_MIN_NODEID) + 1) #define KDFS_CWSB_ID ((KDFS_MAX_NODEID) + 1) #define KDFS_LOCALINODE_MASK 0x00FFFFFF /* the first 8 bits are reserved for the nodeid */ #define KDFS_NODEID_MASK 0xFF000000 /* the nodeid in the ino */ commit d52c6ffb65d4e42b13857f635adb293d7eeecf37 Merge: 156d6a6 1b9e05a Author: ad <leb...@fr...> Date: Fri Mar 26 17:14:19 2010 +0000 [FIX] fix conflict on the last pull diff --cc fs/kdfs/address_space.c index f81abe2,8ef8f46..62d64fb --- a/fs/kdfs/address_space.c +++ b/fs/kdfs/address_space.c @@@ -898,15 -895,16 +900,16 @@@ int content_instantiate(kddm_set_t *kdd content_data->k_mapping = inode->i_mapping; iput(inode); } else if (inode_linked_node(content_data->ino) == kerrighed_node_id){ - DEBUG(DBG_INFO, "K_mapping will be retrieve from iget - the inode is on this node\n"); + DEBUG(DBG_INFO, "K_mapping will be retrieve from iget\n"); inode = kdfs_getinode(k_sb->sb, content_data->ino); content_data->k_mapping = inode->i_mapping; - } else { - DEBUG(DBG_INFO, "K_mapping created from dummy inode info\n"); + } else { + /* do dummy stuff */ + DEBUG(DBG_INFO, "K_mapping exploits a dummy inode\n"); inode = new_inode(k_sb->sb); - inode->i_ino = content_data->ino; - insert_inode_hash(inode); - //inode = kdfs_getinode(k_sb->sb, content_data->ino); + inode->i_ino = content_data->ino; + insert_inode_hash(inode); + content_data->k_mapping = inode->i_mapping; } if (!content_data->k_mapping) DEBUG(DBG_PANIC, "k_mapping was not cleanly initialized\n"); diff --cc fs/kdfs/file.c index 789ddb7,a6dab7a..13339bb --- a/fs/kdfs/file.c +++ b/fs/kdfs/file.c @@@ -257,13 -257,22 +257,13 @@@ kerrighed_node_t kdfs_iol_file_default_ const krgnodemask_t *nodes, int nr_nodes) { - /* - * TODO NOW, Adrien - * Implement - */ kerrighed_node_t ret_val; ++ // TODO Now : Adrien, the following line is obsolete right now struct content_iolinker_data *my_data = (struct content_iolinker_data *)kddm_set->private_data; - - struct kdfs_inode *k_inode = kdfs_ilocalfind(my_data->ino); - - ASSERT(k_inode); - // check who's the default owner of the object !!! - //ret_val = inode_linked_node(k_inode->inode->i_ino); - ret_val = kdfs_file_extent_get_page_owner(k_inode, objid); - kdfs_iput(k_inode->inode->i_ino); - + ret_val = page_linked_node(objid); + DEBUG(DBG_INFO, "######### /\\/\\/\\/ page owner ::: %d\n", ret_val); return ret_val; //return 2; commit 156d6a6f636830f2b175ea7be317bd32ac113420 Author: ad <leb...@fr...> Date: Fri Mar 26 17:05:13 2010 +0000 [MINOR] start to implement the hash mechanism for page locations diff --git a/fs/kdfs/KNOWN_BUGS b/fs/kdfs/KNOWN_BUGS index 213c63b..412c47e 100644 --- a/fs/kdfs/KNOWN_BUGS +++ b/fs/kdfs/KNOWN_BUGS @@ -27,6 +27,10 @@ ls -alR /mnt/kdfs/ leads to an infinite loop (size of DIR2 equals 268 bytes) Check, the size should be zero +Wed Mar 24 12:24:34 UTC 2010 +Can't umount a kDFS partition from the whole kDFS structure + + Miscellaneous knwon bugs diff --git a/fs/kdfs/file.c b/fs/kdfs/file.c index 45a7835..789ddb7 100644 --- a/fs/kdfs/file.c +++ b/fs/kdfs/file.c @@ -257,20 +257,13 @@ kerrighed_node_t kdfs_iol_file_default_owner (kddm_set_t *kddm_set, const krgnodemask_t *nodes, int nr_nodes) { - /* - * TODO NOW, Adrien - * Implement - */ kerrighed_node_t ret_val; struct content_iolinker_data *my_data = (struct content_iolinker_data *)kddm_set->private_data; - struct kdfs_inode *k_inode = kdfs_ilocalfind(my_data->ino); - + // check who's the default owner of the object !!! - //ret_val = inode_linked_node(k_inode->inode->i_ino); - ret_val = kdfs_file_extent_get_page_owner(k_inode, objid); - kdfs_iput(k_inode->inode->i_ino); - + ret_val = page_linked_node(objid); + DEBUG(DBG_INFO, "######### /\\/\\/\\/ page owner ::: %d\n", ret_val); return ret_val; //return 2; diff --git a/fs/kdfs/inode.c b/fs/kdfs/inode.c index 92efd40..2e238a3 100644 --- a/fs/kdfs/inode.c +++ b/fs/kdfs/inode.c @@ -1075,11 +1075,14 @@ int kdfs_iol_inode_alloc_object (kddm_obj_t *objEntry, objEntry->object = k_inode; } else { - /* Object id has beend already allocated so reused the same structure */ + /* Object id has been already allocated so reused the same structure */ DEBUG(DBG_PANIC, "Object %ld was already allocated \n", objid); //kdfs_inode = (struct kdfs_inode*) objEntry->object; // seems to be useless since we do not have to return the object } + /* TODO PRIORITY 3: Adrien + * interest of the following code inside the alloc function + */ if (inode_linked_node(objid) == kerrighed_node_id) { char *phys_dirname; /* Find the physical path corresponding to the KDFS inode */ @@ -1140,8 +1143,7 @@ int kdfs_iol_inode_first_touch(kddm_obj_t *objEntry, DEBUG(DBG_PANIC, "Cannot find inode %ld\n", objid); k_inode->inode->i_ino = objid; insert_inode_hash(k_inode->inode); - } - else { + } else { /* * Check if the inode is locally in the cache * Can happen when a content associated kddm set has been instantiated @@ -1231,7 +1233,7 @@ int kdfs_iol_inode_import_object(struct rpc_desc *desc, res = rpc_unpack_type(desc, net_src); kdfs_import_kdfs_inode(inode_dst, &net_src); - + /* import the extents part */ kdfs_file_extent_net_import(inode_dst, &net_src); commit 77352c38128e22827b8991884a8cbb80684e4e4f Author: alebre <alebre@krgserver.dirty.world> Date: Fri Mar 26 16:58:59 2010 +0000 [MINOR] start to implement the hash mechanism for page locations diff --git a/fs/kdfs/address_space.c b/fs/kdfs/address_space.c index 8c658b2..f81abe2 100644 --- a/fs/kdfs/address_space.c +++ b/fs/kdfs/address_space.c @@ -313,6 +313,11 @@ struct address_space_operations kdfs_aops = { /* ADDRESS SPACE LINKER PART */ /* */ /*****************************************************************************/ +// struct kdfs_inode *k_inode = kdfs_ilocalfind(my_data->ino); +// ret_val = kdfs_file_extent_get_page_owner(k_inode, objid); +// kdfs_iput(k_inode->inode->i_ino); + + struct kdfs_page *kdfs_get_page(kddm_set_id_t set_id, objid_t obj_id) { @@ -892,10 +897,16 @@ int content_instantiate(kddm_set_t *kddm_set, void *private_data, int master) DEBUG(DBG_INFO, "K_mapping from the cache\n"); content_data->k_mapping = inode->i_mapping; iput(inode); - } else { + } else if (inode_linked_node(content_data->ino) == kerrighed_node_id){ DEBUG(DBG_INFO, "K_mapping will be retrieve from iget\n"); inode = kdfs_getinode(k_sb->sb, content_data->ino); content_data->k_mapping = inode->i_mapping; + } else { + /* do dummy stuff */ + DEBUG(DBG_INFO, "K_mapping exploits a dummy inode\n"); + inode = new_inode(k_sb->sb); + inode->i_ino = content_data->ino; + insert_inode_hash(inode); } if (!content_data->k_mapping) DEBUG(DBG_PANIC, "k_mapping was not cleanly initialized\n"); @@ -905,6 +916,7 @@ int content_instantiate(kddm_set_t *kddm_set, void *private_data, int master) return result; } + /* * Uninstantiate a content container. * @author Adrien Lebre ----------------------------------------------------------------------- Summary of changes: fs/kdfs/KNOWN_BUGS | 4 ++ fs/kdfs/address_space.c | 89 ++++++++++++++++++++++++++++++----------------- fs/kdfs/address_space.h | 24 +++++++++++- fs/kdfs/common.h | 7 +++- fs/kdfs/file.c | 17 ++------- fs/kdfs/file_extent.c | 4 ++- fs/kdfs/file_extent.h | 2 +- fs/kdfs/inode.c | 10 +++-- fs/kdfs/inode.h | 1 + fs/kdfs/super.h | 7 +--- 10 files changed, 104 insertions(+), 61 deletions(-) hooks/post-receive -- kdfs |