From: Marko O. <d0...@us...> - 2009-10-23 16:14:05
|
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 9567af3f521aeecb16c274127db8e39ef9527c48 (commit) via d82e0d38f48cb0ff083354a768029cf92b8018d7 (commit) via bfd7d615a19bbd0d0524784462261f068cb520b2 (commit) via 77085c1bc738310b68f2eb81e7dd682a84ebb944 (commit) via 3e68210e5a57162eb213b7bfad04f8ac53a04f2f (commit) via 925cb2ee96c14f8efbcd91f9bec0f1b3d0a1c5cd (commit) via 5cf9481b874f6096355099576c7fb1f46a3f0a77 (commit) via dcd9c702dec76ab46f4ec5d0ac20b22460aa2256 (commit) via 12b0ff33665490c2ccd757991832753168bae7b9 (commit) via 78fd05d7e0ef29510250bb63f387fe212c2c217b (commit) via dad62b458d0bce44981adee29a5e540eb2907847 (commit) via 448c10668045e7d217149e7bc7a1725730202e5e (commit) via 7795b4846f5cc77bca954e6f8f207dde436ecbb9 (commit) via 9f15d3b58f3f75135f3cf3e88e0094bf75d80c38 (commit) via d88702c37c8cb0c089fa2d839920daa1270bf39a (commit) via 0bf1ac82724db2090d893fbdef7a49a1ebc07ca6 (commit) via a657d43db944e313e4b5975e49c17e0981024f82 (commit) via 77cc1932ed4ca5bc6708e4bbbfa5753fe72da878 (commit) via 629ed1e4c313c1e20b00b5fdc6d5ce0edc635571 (commit) via 42a1a88931fcf91b953109de529a69021bf9f777 (commit) via 7b412f2abfd2b8ae9a13b2cab303167bfd32cd80 (commit) via e30da12106f8c6a23cd1e6be028d3a64877213d8 (commit) via 9bd901dd87d40089430b5215b9370a91fe5f9a3f (commit) via d98ddf3f65bcd107c0f0edc09f5fcef9e49a03ca (commit) from 5d69182d2de672486e8e9a5da934a8dced6996c5 (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 9567af3f521aeecb16c274127db8e39ef9527c48 Author: Marko Obrovac <mar...@in...> Date: Fri Oct 23 16:08:00 2009 +0000 Init kdfs upon kerrighed init. Note: this is "the dirty way". We should try to load it independently (as a module or any other suitable fashion) diff --git a/fs/kdfs/super.c b/fs/kdfs/super.c index da2f32e..1c2c87b 100644 --- a/fs/kdfs/super.c +++ b/fs/kdfs/super.c @@ -1483,7 +1483,7 @@ static struct file_system_type kdfs_fs_type = { .kill_sb = kdfs_kill_sb, /* Remove kDFS super block */ }; -int init_kdfs() +int init_kdfs(void) { struct proc_dir_entry *p; int err; @@ -1491,6 +1491,8 @@ int init_kdfs() // TODO Do I need this unique id ? //init_unique_id_root (&file_struct_unique_id_root); + + printk("KDFS KDFS KDFS KDFS KDFS KDFS KDFS KDFS !!!!!!!!!!!!!!!!!!!!!!!"); /* Register the kDFS File System */ err = register_filesystem(&kdfs_fs_type); @@ -1567,6 +1569,7 @@ int init_kdfs() printk("Init Kernel Distributed File System : done\n"); return 0; + } /* TODO: Sync all dirty blocks? */ @@ -2111,3 +2114,4 @@ struct iolinker_struct superblock_io_linker = { .remove_object = kdfs_iol_sb_remove, .sync_object = kdfs_iol_sb_sync_object, }; + diff --git a/kerrighed/hotplug/krginit.c b/kerrighed/hotplug/krginit.c index 02b1cc7..5d9afde 100644 --- a/kerrighed/hotplug/krginit.c +++ b/kerrighed/hotplug/krginit.c @@ -20,6 +20,10 @@ #ifdef CONFIG_KRG_HOTPLUG #include <kerrighed/hotplug.h> #endif +#ifdef CONFIG_KDFS_FS +int init_kdfs(void); +void cleanup_kdfs(void); +#endif void init_node_discovering(void); @@ -409,8 +413,17 @@ int init_kerrighed_upper_layers(void) goto err_sched; #endif +#ifdef CONFIG_KDFS_FS + if (init_kdfs()) + goto err_kdfs; +#endif + return 0; +#ifdef CONFIG_KDFS_FS + cleanup_kdfs(); + err_kdfs: +#endif #ifdef CONFIG_KRG_SCHED cleanup_scheduler(); err_sched: commit d82e0d38f48cb0ff083354a768029cf92b8018d7 Merge: bfd7d61 5d69182 Author: Marko Obrovac <mar...@in...> Date: Wed Oct 21 12:37:16 2009 +0000 Merge branch 'make_kdfs_compile' of ssh://kdfs.git.sourceforge.net/gitroot/kdfs/kernel into make_kdfs_compile commit bfd7d615a19bbd0d0524784462261f068cb520b2 Author: Marko Obrovac <mar...@in...> Date: Tue Oct 20 14:52:38 2009 +0000 [FIX] Change the makefile to conform to new compiling rules (kdfs is now built in the kernel, not a module) diff --git a/fs/kdfs/Makefile b/fs/kdfs/Makefile index ca9d271..f59b146 100644 --- a/fs/kdfs/Makefile +++ b/fs/kdfs/Makefile @@ -1,7 +1 @@ -obj-m += krgbuiltin.o - - -krgbuiltin-objs := physical_fs.o super.o inode.o dir.o file.o address_space.o extent.o cow.o -krgbuiltin-objs += $(krgbuiltin-y) - -EXTRA_CFLAGS += -I$(M) +obj-y := physical_fs.o super.o inode.o dir.o file.o address_space.o extent.o cow.o commit 77085c1bc738310b68f2eb81e7dd682a84ebb944 Author: Marko Obrovac <mar...@in...> Date: Tue Oct 20 14:51:37 2009 +0000 [FIX] fixed name clashes with the kerrighed functions (and marked all the internal functions as internal) diff --git a/fs/kdfs/physical_fs.c b/fs/kdfs/physical_fs.c index 0ae67a8..c299877 100644 --- a/fs/kdfs/physical_fs.c +++ b/fs/kdfs/physical_fs.c @@ -24,7 +24,7 @@ #define KDFS_PART "KDFS - Native File System Accesses" -void chroot_to_physical_root(struct path *saved_root) +void __change_to_physical_root(struct path *saved_root) { write_lock(¤t->fs->lock); *saved_root = current->fs->root; @@ -32,7 +32,7 @@ void chroot_to_physical_root(struct path *saved_root) write_unlock(¤t->fs->lock); } -void chroot_to_saved_root(const struct path *saved_root) +void __change_to_saved_root(const struct path *saved_root) { struct path root; @@ -43,7 +43,7 @@ void chroot_to_saved_root(const struct path *saved_root) path_put(&root); } -int change_creds(struct cred **overridden, const struct cred **old, +int __change_creds(struct cred **overridden, const struct cred **old, uid_t fsuid, gid_t fsgid) { *overridden = prepare_creds(); @@ -57,7 +57,7 @@ int change_creds(struct cred **overridden, const struct cred **old, return 0; } -void revert_old_creds(struct cred *overridden, const struct cred *old) +void __revert_old_creds(struct cred *overridden, const struct cred *old) { revert_creds(old); put_cred(overridden); @@ -90,11 +90,11 @@ long create_phys_dir(const char *pathname, DEBUG(DBG_INFO, "Create dir %s\n", pathname); - error = change_creds(&overridden_creds, &old_creds, uid, gid); + error = __change_creds(&overridden_creds, &old_creds, uid, gid); if (error) goto out; - chroot_to_physical_root(&saved_path); + __change_to_physical_root(&saved_path); error = path_lookup(pathname, LOOKUP_PARENT, &nd); if (error) @@ -124,8 +124,8 @@ long create_phys_dir(const char *pathname, path_put(&nd.path); out: - chroot_to_saved_root(&saved_path); - revert_old_creds(overridden_creds, old_creds); + __change_to_saved_root(&saved_path); + __revert_old_creds(overridden_creds, old_creds); return error; } @@ -154,11 +154,11 @@ long remove_phys_dir(const char *pathname, uid_t uid, gid_t gid) DEBUG(DBG_TRACE, "Remove dir %s\n", pathname); - res = change_creds(&overridden_creds, &old_creds, uid, gid); + res = __change_creds(&overridden_creds, &old_creds, uid, gid); if (res) goto out; - chroot_to_physical_root(&saved_path); + __change_to_physical_root(&saved_path); file = filp_open(pathname, O_LARGEFILE|O_RDONLY, 0644); if (IS_ERR(file) && PTR_ERR(file) == -ENOENT) { @@ -184,8 +184,8 @@ long remove_phys_dir(const char *pathname, uid_t uid, gid_t gid) filp_close(file,current->files); out: - chroot_to_saved_root(&saved_path); - revert_old_creds(overridden_creds, old_creds); + __change_to_saved_root(&saved_path); + __revert_old_creds(overridden_creds, old_creds); return res; } @@ -213,11 +213,11 @@ struct file *open_phys_file(char *filename, int flags, int mode, uid_t uid, gid_ const struct cred *old_creds; struct cred *overridden_creds; - error = change_creds(&overridden_creds, &old_creds, uid, gid); + error = __change_creds(&overridden_creds, &old_creds, uid, gid); if (error) goto out; - chroot_to_physical_root(&saved_path); + __change_to_physical_root(&saved_path); DEBUG(DBG_INFO, "Open physical file %s with flags 0x%08x - mode %o\n", @@ -230,8 +230,8 @@ struct file *open_phys_file(char *filename, int flags, int mode, uid_t uid, gid_ DEBUG(DBG_INFO, "Open physical file %s done : %p\n", filename, file); out: - chroot_to_saved_root(&saved_path); - revert_old_creds(overridden_creds, old_creds); + __change_to_saved_root(&saved_path); + __revert_old_creds(overridden_creds, old_creds); if (error) file = ERR_PTR(error); @@ -417,11 +417,11 @@ int remove_phys_file(const char *filename, uid_t uid, gid_t gid) DEBUG(DBG_TRACE, "Remove file %s\n", filename); - res = change_creds(&overridden_creds, &old_creds, uid, gid); + res = __change_creds(&overridden_creds, &old_creds, uid, gid); if (res) goto out; - chroot_to_physical_root(&saved_path); + __change_to_physical_root(&saved_path); file = filp_open(filename, O_LARGEFILE|O_RDONLY, 0644); @@ -448,8 +448,8 @@ int remove_phys_file(const char *filename, uid_t uid, gid_t gid) DEBUG(DBG_INFO, "After vfs_unlink res = %d\n", res); out: - chroot_to_saved_root(&saved_path); - revert_old_creds(overridden_creds, old_creds); + __change_to_saved_root(&saved_path); + __revert_old_creds(overridden_creds, old_creds); return res; } commit 3e68210e5a57162eb213b7bfad04f8ac53a04f2f Author: Marko Obrovac <mar...@in...> Date: Tue Oct 20 13:38:16 2009 +0000 [FIX] rename include dir from cntr to kddm diff --git a/fs/kdfs/cow.c b/fs/kdfs/cow.c index 862277e..478b814 100644 --- a/fs/kdfs/cow.c +++ b/fs/kdfs/cow.c @@ -10,7 +10,7 @@ #include <linux/pagemap.h> -#include <ctnr/kddm.h> +#include <kddm/kddm.h> #include "inode.h" #include "address_space.h" diff --git a/fs/kdfs/extent.c b/fs/kdfs/extent.c index b9d0556..4d142e7 100644 --- a/fs/kdfs/extent.c +++ b/fs/kdfs/extent.c @@ -10,7 +10,7 @@ #include <linux/pagemap.h> -#include <ctnr/kddm.h> +#include <kddm/kddm.h> #include "inode.h" #include "address_space.h" commit 925cb2ee96c14f8efbcd91f9bec0f1b3d0a1c5cd Author: alebre <alebre@debian.localdomain> Date: Tue Oct 20 14:56:48 2009 +0200 [REFACTORING] address_space.c (begin/end write and SetPageLocked) diff --git a/fs/kdfs/address_space.c b/fs/kdfs/address_space.c index a98c5ab..5b60704 100644 --- a/fs/kdfs/address_space.c +++ b/fs/kdfs/address_space.c @@ -96,20 +96,22 @@ int kdfs_readpage(struct file *file, struct page *page) return 0; } +/* TODO Suggested by Adrien for xxxx + * Priority : 3 + * Merge new kdfs_write_begin function with the older kdfs_prepare_write. + */ /* * page has been found or allocated from/in the page cache and locked * However, the data should be pre-read from the storage * Thus, one first-touch can happen. ISSUE, put data in the same page */ -int kdfs_prepare_write (struct file *file, - struct page *page, - unsigned offset, - unsigned _to) +int __kdfs_prepare_write (struct file *file, struct page *page, + unsigned offset, unsigned _to) { struct kdfs_page *k_page = NULL; struct kdfs_inode *k_inode = NULL; - DEBUG (DBG_INFO, "Prepare_write for file %s (ino %ld), page %ld from %d to %d (count = %d, mapping = %p)\n", + DEBUG (DBG_INFO, "begin_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); @@ -133,8 +135,36 @@ int kdfs_prepare_write (struct file *file, return 0; } -// TODO cf. http://www.mail-archive.com/git...@vg.../msg03083.html -int kdfs_commit_write(struct file *file, +int kdfs_write_begin (struct file *file, + struct address_space *mapping, + loff_t pos, unsigned len, unsigned flags, + struct page **pagep, void **fsdata) +{ + struct page *page; + pgoff_t index; + unsigned from; + + index = pos >> PAGE_CACHE_SHIFT; + from = pos & (PAGE_CACHE_SIZE - 1); + + page = grab_cache_page_write_begin(mapping, index, flags); + if (!page) + return -ENOMEM; + + *pagep = page; + return __kdfs_prepare_write(file, page, from, from+len); +} + + +/* TODO Suggested by Adrien for xxxx + * Priority : 3 + * Merge new kdfs_write_begin function with the older kdfs_prepare_write. + */ +/* TODO Suggested by Adrien for Adrien, + * an old TODO, ... probably just remove it ;) + * cf. http://www.mail-archive.com/git...@vg.../msg03083.html + */ +int __kdfs_commit_write(struct file *file, struct page *page, unsigned offset, unsigned _to) @@ -170,6 +200,30 @@ int kdfs_commit_write(struct file *file, return 0; } +int kdfs_write_end(struct file *file, + struct address_space *mapping, + loff_t pos, unsigned len, unsigned copied, + struct page *page, void *fsdata) +{ + unsigned from = pos & (PAGE_CACHE_SIZE - 1); + + /* zero the stale part of the page if we did a short copy */ + if (copied < len) { + void *kaddr = kmap_atomic(page, KM_USER0); + memset(kaddr + from + copied, 0, len - copied); + flush_dcache_page(page); + kunmap_atomic(kaddr, KM_USER0); + } + + __kdfs_commit_write(file, page, from, from+copied); + + unlock_page(page); + page_cache_release(page); + + return copied; +} + + int kdfs_writepage(struct page *page, struct writeback_control *wbc) { @@ -240,9 +294,9 @@ int kdfs_releasepage(struct page *page, gfp_t mask) } struct address_space_operations kdfs_aops = { - .commit_write = kdfs_commit_write, + .write_begin = kdfs_write_begin, + .write_end = kdfs_write_end, .invalidatepage = kdfs_invalidatepage, - .prepare_write = kdfs_prepare_write, .readpage = kdfs_readpage, .releasepage = kdfs_releasepage, .writepage = kdfs_writepage, @@ -612,7 +666,7 @@ int kdfs_iol_page_invalidate(kddm_obj_t *objEntry, kddm_set_t *set, objid_t obji struct kdfs_page *k_page = (struct kdfs_page *)objEntry->object; PRINT_FUNCTION_NAME; - SetPageLocked(k_page->page); + trylock_page(k_page->page); DEBUG(DBG_ALERT, "Page count before =%d\n", page_count(k_page->page)); remove_from_page_cache(k_page->page); ClearPagePrivate(k_page->page); @@ -734,7 +788,7 @@ int kdfs_iol_page_remove(void *object, struct kddm_set *set, objid_t objid) * so we need to remove the page from the cache by hand, because * we are not called by the VFS */ - SetPageLocked(k_page->page); + trylock_page(k_page->page); DEBUG(DBG_ALERT, "Page count before =%d\n", page_count(k_page->page)); remove_from_page_cache(k_page->page); ClearPagePrivate(k_page->page); diff --git a/fs/kdfs/address_space.h b/fs/kdfs/address_space.h index 68ca007..5a7ac7a 100644 --- a/fs/kdfs/address_space.h +++ b/fs/kdfs/address_space.h @@ -9,6 +9,7 @@ * @maintainer Adrien Lebre * * Copyright (C) 2006-2007, XtreemOS Consortium. + * Copyright (C) 2008-20xx, XtreemOS Consortium, Ascola Research Group. */ #ifndef __KDFS_ADDR_SPACE__ diff --git a/fs/kdfs/dir.c b/fs/kdfs/dir.c index 3c5a67a..6eb9439 100644 --- a/fs/kdfs/dir.c +++ b/fs/kdfs/dir.c @@ -595,7 +595,7 @@ int kdfs_make_empty(struct kdfs_inode *k_pdir, struct kdfs_inode *k_dir) */ int kdfs_dir_empty(struct kdfs_inode *k_dir) { - DEBUG(DBG_INFO, "Directory size: %llu empty if: %d\n", k_dir->inode->i_size, KDFS_DIRENT_SIZE * 2); + DEBUG(DBG_INFO, "Directory size: %llu empty if: %ld\n", k_dir->inode->i_size, KDFS_DIRENT_SIZE * 2); if (k_dir->inode->i_size > KDFS_DIRENT_SIZE * 2) return 0; return 1; diff --git a/fs/kdfs/inode.c b/fs/kdfs/inode.c index 10ec71a..f126cb8 100644 --- a/fs/kdfs/inode.c +++ b/fs/kdfs/inode.c @@ -180,8 +180,8 @@ struct kdfs_inode *__kdfs_mknod(struct kdfs_inode *k_pdir, break; } - k_nnod->inode->i_uid = current->fsuid; - k_nnod->inode->i_gid = current->fsgid; + k_nnod->inode->i_uid = current_fsuid(); + k_nnod->inode->i_gid = current_fsgid(); if (k_pdir->inode->i_mode & S_ISGID) { k_nnod->inode->i_gid = k_pdir->inode->i_gid; commit 5cf9481b874f6096355099576c7fb1f46a3f0a77 Author: Pierre Riteau <Pie...@ir...> Date: Tue Oct 20 13:38:44 2009 +0200 [FIX] Correct the code using read_inode which is not in the new kernels. Closed ticket #7 diff --git a/fs/kdfs/address_space.c b/fs/kdfs/address_space.c index 0460ec1..a98c5ab 100644 --- a/fs/kdfs/address_space.c +++ b/fs/kdfs/address_space.c @@ -825,7 +825,7 @@ int content_instantiate(kddm_set_t *kddm_set, void *private_data, int master) iput(inode); } else { DEBUG(DBG_INFO, "K_mapping will be retrieve from iget\n"); - inode = iget(k_sb->sb, content_data->ino); + inode = kdfs_getinode(k_sb->sb, content_data->ino); content_data->k_mapping = inode->i_mapping; } if (!content_data->k_mapping) diff --git a/fs/kdfs/inode.c b/fs/kdfs/inode.c index 3cf9616..10ec71a 100644 --- a/fs/kdfs/inode.c +++ b/fs/kdfs/inode.c @@ -1142,7 +1142,7 @@ int kdfs_iol_inode_first_touch(kddm_obj_t *objEntry, if (k_inode->inode) iput(k_inode->inode); else - k_inode->inode = iget(k_sb->sb, objid); + k_inode->inode = kdfs_getinode(k_sb->sb, objid); k_inode->flags = K_INODE_OK; } diff --git a/fs/kdfs/super.c b/fs/kdfs/super.c index 045c077..da2f32e 100644 --- a/fs/kdfs/super.c +++ b/fs/kdfs/super.c @@ -921,14 +921,14 @@ int kdfs_statfs(struct dentry *dfs, struct kstatfs *buf) * @param inode the VFS inode * */ -void kdfs_read_inode(struct inode *inode) +struct inode *kdfs_getinode(struct super_block *sb, unsigned long ino) { + struct inode *inode = NULL; struct file *file = NULL; char *phys_filename = NULL; struct kdfs_physical_inode phys_inode; PRINT_FUNCTION_NAME ; - ASSERT (inode != NULL) ; /* * TODO PRIORITY 2: Adrien @@ -936,6 +936,11 @@ void kdfs_read_inode(struct inode *inode) * For the moment, the workaround consists in using sb->s_fs_info to * reach it. It is probably not the best and cleanest solution. */ + inode = iget_locked(sb, ino); + if (!inode) + return ERR_PTR(-ENOMEM); + if (!(inode->i_state & I_NEW)) + return inode; /* Retrieve the inode meta file */ phys_filename = kmalloc(PATH_MAX, GFP_KERNEL); @@ -975,7 +980,9 @@ void kdfs_read_inode(struct inode *inode) inode->i_ino, ((struct kdfs_super_block*)inode->i_sb->s_fs_info)->k_opt->part_name); kfree(phys_filename); + unlock_new_inode(inode); PRINT_FUNCTION_EXIT; + return inode; } /* @@ -1254,7 +1261,6 @@ out: static struct super_operations kdfs_sops = { .delete_inode = kdfs_delete_inode, .drop_inode = kdfs_drop_inode, - .read_inode = kdfs_read_inode, .show_options = kdfs_show_options, .statfs = kdfs_statfs, .sync_fs = kdfs_sync_fs, diff --git a/fs/kdfs/super.h b/fs/kdfs/super.h index 36fc1f0..f480a74 100644 --- a/fs/kdfs/super.h +++ b/fs/kdfs/super.h @@ -216,6 +216,7 @@ void cleanup_kdfs(void); void kdfs_getphysicalpath(struct kdfs_super_block *k_sb, unsigned long ino, char *physical_filename); int kdfs_write_inode(struct inode *inode); +struct inode *kdfs_getinode(struct super_block *sb, unsigned long ino); /* Get a free inode id from kdfs_sb partition */ ino_t kdfs_get_freeino(struct kdfs_super_block *k_sb); commit dcd9c702dec76ab46f4ec5d0ac20b22460aa2256 Author: Pierre Riteau <Pie...@ir...> Date: Tue Oct 20 13:27:11 2009 +0200 [FIX] Correct all include paths to kddm.h diff --git a/fs/kdfs/address_space.c b/fs/kdfs/address_space.c index 65ae72f..0460ec1 100644 --- a/fs/kdfs/address_space.c +++ b/fs/kdfs/address_space.c @@ -13,7 +13,7 @@ #include <linux/pagemap.h> -#include <ctnr/kddm.h> +#include <kddm/kddm.h> #include "super.h" #include "inode.h" diff --git a/fs/kdfs/dir.c b/fs/kdfs/dir.c index 644d248..3c5a67a 100644 --- a/fs/kdfs/dir.c +++ b/fs/kdfs/dir.c @@ -13,7 +13,7 @@ #include <linux/buffer_head.h> -#include <ctnr/kddm.h> +#include <kddm/kddm.h> #include "super.h" #include "inode.h" diff --git a/fs/kdfs/file.c b/fs/kdfs/file.c index ea9898e..a1707bc 100644 --- a/fs/kdfs/file.c +++ b/fs/kdfs/file.c @@ -13,7 +13,7 @@ #include <linux/buffer_head.h> -#include <ctnr/kddm.h> +#include <kddm/kddm.h> #include "super.h" #include "inode.h" commit 12b0ff33665490c2ccd757991832753168bae7b9 Author: Pierre Riteau <Pie...@ir...> Date: Tue Oct 20 11:04:01 2009 +0200 [FIX] Fix printing of i_version which is u64 diff --git a/fs/kdfs/inode.c b/fs/kdfs/inode.c index ab0c3cd..3cf9616 100644 --- a/fs/kdfs/inode.c +++ b/fs/kdfs/inode.c @@ -37,7 +37,7 @@ void print_inode_cont(struct inode *node) printk(" i_nlink: %u\n", node->i_nlink); printk(" i_uid: %u\n", node->i_uid); printk(" i_gid: %u\n", node->i_gid); - printk("i_version: %ld\n", node->i_version); + printk("i_version: %llu\n", (unsigned long long)node->i_version); printk(" i_mode: %x\n\n\n", node->i_mode); } commit 78fd05d7e0ef29510250bb63f387fe212c2c217b Author: Pierre Riteau <Pie...@ir...> Date: Tue Oct 20 11:03:09 2009 +0200 [FIX] Fix include path diff --git a/fs/kdfs/inode.c b/fs/kdfs/inode.c index 3e991b0..ab0c3cd 100644 --- a/fs/kdfs/inode.c +++ b/fs/kdfs/inode.c @@ -11,7 +11,7 @@ * Copyright (C) 2006-2007, XtreemOS Consortium. */ -#include <ctnr/kddm.h> +#include <kddm/kddm.h> #include "super.h" #include "inode.h" commit dad62b458d0bce44981adee29a5e540eb2907847 Author: Marko Obrovac <mar...@in...> Date: Mon Oct 19 12:07:47 2009 +0000 [FIX] Remove unused (and deprecated) super_operations member put_inode (partial ticket #7) diff --git a/fs/kdfs/super.c b/fs/kdfs/super.c index 2de6c0d..045c077 100644 --- a/fs/kdfs/super.c +++ b/fs/kdfs/super.c @@ -1043,23 +1043,6 @@ int kdfs_write_inode(struct inode *inode) } /* - * Put a kdfs inode - * This function is called by the VFS when someone calls iput() - * - * @author Adrien Lebre - * - * @param inode The VFS inode - * @comment This function is mainly used for debugging purpose. - * From kDFS behavior point of view, it is useless and has probably - * to be simply removed. - */ -void kdfs_put_inode(struct inode *inode) -{ - DEBUG (DBG_INFO, "inode id %ld (i_count = %d)\n", - inode->i_ino, atomic_read(&inode->i_count)); -} - -/* * Drop a kdfs inode from the inode cache * This function is called by the VFS when someone calls iput_final() * @@ -1271,7 +1254,6 @@ out: static struct super_operations kdfs_sops = { .delete_inode = kdfs_delete_inode, .drop_inode = kdfs_drop_inode, - .put_inode = kdfs_put_inode, .read_inode = kdfs_read_inode, .show_options = kdfs_show_options, .statfs = kdfs_statfs, commit 448c10668045e7d217149e7bc7a1725730202e5e Author: Marko Obrovac <mar...@in...> Date: Mon Oct 19 11:52:02 2009 +0000 [ADD] Added kDFS linker and kddm set constants diff --git a/include/kddm/io_linker.h b/include/kddm/io_linker.h index 934a154..41abb51 100644 --- a/include/kddm/io_linker.h +++ b/include/kddm/io_linker.h @@ -64,6 +64,7 @@ enum STRING_LIST_LINKER, KDDM_TEST_LINKER, MM_STRUCT_LINKER, + SB_LINKER, MAX_IO_LINKER, /* MUST always be the last one */ } ; diff --git a/include/kddm/kddm_set.h b/include/kddm/kddm_set.h index 3e3f54b..6853124 100644 --- a/include/kddm/kddm_set.h +++ b/include/kddm/kddm_set.h @@ -106,6 +106,7 @@ enum KDDM_TEST4_LOC, // 68 KDDM_TEST4096, // 69 MM_STRUCT_KDDM_ID, // 70 + KDFS_SB_KDDM_ID, MIN_KDDM_ID, /* MUST always be the last one */ }; commit 7795b4846f5cc77bca954e6f8f207dde436ecbb9 Author: Marko Obrovac <mar...@in...> Date: Sun Oct 18 22:23:21 2009 +0200 [FIX] ProcFS: the proc_root_fs variable is not available any more (and non-existent, for that matter). Instead, file systems should register themselves with the "fs/FS_NAME" name syntax, leaving the parent proc_dir as NULL. Also, the write_proc function should return an int, not a ssize_t. The "owner" field is no longer available as part of the proc_dir_entry structure. Following other file systems' example, it was simple removed from the code (apparently, there's another way of keeping track of processes using a proc entry) [FIX] Fixed a printk - when printing long ints, %ld should be used [FIX] super_operations the signature of umount changed - now there's only one argument - the super_block which should be unmounted. There are still other issues concerning the super_operations structure that need to be solved - see ticket #7 [FIX] simple_set_mnt does not return an error code any more. However, looking at other file systems, they seem just to use it "as-is", so probably we should remove the code below it (which used to handle error cases) diff --git a/fs/kdfs/super.c b/fs/kdfs/super.c index 8711213..2de6c0d 100644 --- a/fs/kdfs/super.c +++ b/fs/kdfs/super.c @@ -17,7 +17,7 @@ #include <linux/proc_fs.h> #include <linux/seq_file.h> -#include <ctnr/kddm.h> +#include <kddm/kddm.h> #include "physical_fs.h" #include "super.h" @@ -80,7 +80,7 @@ kdfs_node_t k_rootsb_nodeid = KERRIGHED_NODE_ID_NONE; struct proc_dir_entry *proc_fs_kdfs = NULL; /* Increase the kdfs_gen counter. Used by checkpoint code */ -ssize_t kdfs_proc_inc_gen(struct file *filp, const char __user *buf, +int kdfs_proc_inc_gen(struct file *filp, const char __user *buf, unsigned long len, void *data) { extern unsigned int kdfs_gen; @@ -89,7 +89,7 @@ ssize_t kdfs_proc_inc_gen(struct file *filp, const char __user *buf, } /* Lists the inodes of the local kDFS superblock */ -ssize_t kdfs_proc_inodes_write(struct file *filp, const char __user *buf, +int kdfs_proc_inodes_write(struct file *filp, const char __user *buf, unsigned long len, void *data) { struct inode *inode; @@ -112,7 +112,7 @@ ssize_t kdfs_proc_inodes_write(struct file *filp, const char __user *buf, printk(" Inode %ld, count %d, mode %u, size %lld\n", inode->i_ino, atomic_read(&inode->i_count), inode->i_mode, inode->i_size); printk("Dumping s_files list\n"); list_for_each_entry(file, &k_sb->sb->s_files, f_u.fu_list) - printk(" File with count %d", atomic_read(&file->f_count)); + printk(" File with count %ld", atomic_read(&file->f_count)); } else printk("There is no kDFS superblock file on the current node\n"); @@ -1165,7 +1165,7 @@ void kdfs_delete_inode(struct inode *inode) PRINT_FUNCTION_EXIT; } -void kdfs_umount(struct vfsmount *vfsmnt, int flags) +void kdfs_umount(/*struct vfsmount *vfsmnt, int flags*/struct super_block *sb) { struct kdfs_super_block *k_sb = NULL; struct kdfs_cw_sb *k_cwsb = NULL; @@ -1175,6 +1175,12 @@ void kdfs_umount(struct vfsmount *vfsmnt, int flags) k_sb = kdfs_grabsb(kerrighed_node_id); BUG_ON(k_sb == NULL); + + if (k_sb->sb != sb) { + DEBUG(DBG_INFO, "The super block to umount is not a kdfs one!\n"); + return; + } + BUG_ON(k_sb->inode_bitmap == NULL); sb_bitmap_save(k_sb); @@ -1387,8 +1393,14 @@ int kdfs_get_sb(struct file_system_type *fs_type, int flags, } //TODO PRIORITY 3: Check where this come from (ext2fs super block?) and see why we would (not?) need it //kdfs_sb->sb->s_flags |= MS_ACTIVE; - error = simple_set_mnt(mnt, k_sb->sb); + simple_set_mnt(mnt, k_sb->sb); + /* + * TODO: simple_set_mnt returns void now! Thus, this code + * will never be executed so it becomes useless!!! + * Check whether there are other places where this + * should be checked, i.e. become usefull + */ if (error < 0) { DEBUG(DBG_ALERT, "Can't retrieve KDFS super bloc\n"); // TODO PRIORITY 1: Put some goto to manage all errors @@ -1549,22 +1561,18 @@ int init_kdfs() */ /* Create /proc/fs/kdfs directory */ - proc_fs_kdfs = proc_mkdir("kdfs", proc_root_fs); + proc_fs_kdfs = proc_mkdir("fs/kdfs", NULL); if (proc_fs_kdfs == NULL) return -ENOMEM; - /* owner is used to avoid unloading the module while the entry is in use */ - proc_fs_kdfs->owner = THIS_MODULE; p = create_proc_entry("inodes", S_IFREG|S_IRUGO, proc_fs_kdfs); if (p == NULL) return -ENOMEM; - p->owner = THIS_MODULE; p->write_proc = kdfs_proc_inodes_write; p = create_proc_entry("gen", S_IFREG|S_IRUGO, proc_fs_kdfs); if (p == NULL) return -ENOMEM; - p->owner = THIS_MODULE; p->write_proc = kdfs_proc_inc_gen; #endif @@ -1596,7 +1604,7 @@ void cleanup_kdfs(void) #ifdef __KDFS_PROCDIR_ remove_proc_entry("gen", proc_fs_kdfs); remove_proc_entry("inodes", proc_fs_kdfs); - remove_proc_entry("kdfs", proc_root_fs); + remove_proc_entry("fs/kdfs", NULL); #endif unregister_filesystem(&kdfs_fs_type); commit 9f15d3b58f3f75135f3cf3e88e0094bf75d80c38 Author: Marko Obrovac <mar...@in...> Date: Sun Oct 18 19:23:52 2009 +0200 [FIX] Conform the nameidata structure changes to the newest kernel structure diff --git a/fs/kdfs/physical_fs.c b/fs/kdfs/physical_fs.c index c6a7f47..0ae67a8 100644 --- a/fs/kdfs/physical_fs.c +++ b/fs/kdfs/physical_fs.c @@ -114,14 +114,14 @@ long create_phys_dir(const char *pathname, lockdep_on(); error = PTR_ERR(dentry); if (!IS_ERR(dentry)) { - error = vfs_mkdir(nd.dentry->d_inode, dentry, mode); + error = vfs_mkdir(nd.path.dentry->d_inode, dentry, mode); dput(dentry); } lockdep_off(); - mutex_unlock(&nd.dentry->d_inode->i_mutex); + mutex_unlock(&nd.path.dentry->d_inode->i_mutex); lockdep_on(); - path_release(&nd); + path_put(&nd.path); out: chroot_to_saved_root(&saved_path); @@ -208,7 +208,7 @@ out: struct file *open_phys_file(char *filename, int flags, int mode, uid_t uid, gid_t gid) { int error = 0; - struct file *file; + struct file *file = NULL; struct path saved_path; const struct cred *old_creds; struct cred *overridden_creds; commit d88702c37c8cb0c089fa2d839920daa1270bf39a Author: Marko Obrovac <mar...@in...> Date: Sun Oct 18 19:02:42 2009 +0200 [FIX] Change to newest kernel structure changes concerning credentials and file system structure changes (tickets #4, #5) diff --git a/fs/kdfs/physical_fs.c b/fs/kdfs/physical_fs.c index 6b91b91..c6a7f47 100644 --- a/fs/kdfs/physical_fs.c +++ b/fs/kdfs/physical_fs.c @@ -16,12 +16,53 @@ #include <asm/uaccess.h> #include <linux/namei.h> +#include <linux/fs_struct.h> #include "physical_fs.h" #include "debug_kdfs.h" #define KDFS_PART "KDFS - Native File System Accesses" + +void chroot_to_physical_root(struct path *saved_root) +{ + write_lock(¤t->fs->lock); + *saved_root = current->fs->root; + current->fs->root = init_task.fs->root; + write_unlock(¤t->fs->lock); +} + +void chroot_to_saved_root(const struct path *saved_root) +{ + struct path root; + + write_lock(¤t->fs->lock); + root = current->fs->root; + current->fs->root = *saved_root; + write_unlock(¤t->fs->lock); + path_put(&root); +} + +int change_creds(struct cred **overridden, const struct cred **old, + uid_t fsuid, gid_t fsgid) +{ + *overridden = prepare_creds(); + if (!*overridden) + return -ENOMEM; + + (*overridden)->fsuid = fsuid; + (*overridden)->fsgid = fsgid; + *old = override_creds(*overridden); + + return 0; +} + +void revert_old_creds(struct cred *overridden, const struct cred *old) +{ + revert_creds(old); + put_cred(overridden); +} + /* * Create a physical directory * @@ -43,23 +84,18 @@ long create_phys_dir(const char *pathname, int error = 0; struct dentry *dentry; struct nameidata nd; - struct dentry *saved_root; - struct vfsmount *saved_mnt; - uid_t saved_uid; - gid_t saved_gid; + struct path saved_path; + const struct cred *old_creds; + struct cred *overridden_creds; DEBUG(DBG_INFO, "Create dir %s\n", pathname); - saved_mnt = current->fs->rootmnt; - saved_root = current->fs->root; - saved_uid = current_fsuid(); - saved_gid = current_fsgid(); - - current->fs->rootmnt = init_task.fs->rootmnt; - current->fs->root = init_task.fs->root; - current->fsuid = uid; - current->fsgid = gid; - + error = change_creds(&overridden_creds, &old_creds, uid, gid); + if (error) + goto out; + + chroot_to_physical_root(&saved_path); + error = path_lookup(pathname, LOOKUP_PARENT, &nd); if (error) goto out; @@ -88,10 +124,8 @@ long create_phys_dir(const char *pathname, path_release(&nd); out: - current->fsuid = saved_uid; - current->fsgid = saved_gid; - current->fs->rootmnt = saved_mnt; - current->fs->root = saved_root; + chroot_to_saved_root(&saved_path); + revert_old_creds(overridden_creds, old_creds); return error; } @@ -111,26 +145,21 @@ out: long remove_phys_dir(const char *pathname, uid_t uid, gid_t gid) { struct file *file = NULL; - struct dentry *dentry; - struct inode *dir; + struct dentry *dentry; + struct inode *dir; long res = 0; - struct dentry *saved_root; - struct vfsmount *saved_mnt; - uid_t saved_uid; - gid_t saved_gid; + struct path saved_path; + const struct cred *old_creds; + struct cred *overridden_creds; DEBUG(DBG_TRACE, "Remove dir %s\n", pathname); - saved_mnt = current->fs->rootmnt; - saved_root = current->fs->root; - saved_uid = current_fsuid(); - saved_gid = current_fsgid(); - - current->fs->rootmnt = init_task.fs->rootmnt; - current->fs->root = init_task.fs->root; - current->fsuid = uid; - current->fsgid = gid; - + res = change_creds(&overridden_creds, &old_creds, uid, gid); + if (res) + goto out; + + chroot_to_physical_root(&saved_path); + file = filp_open(pathname, O_LARGEFILE|O_RDONLY, 0644); if (IS_ERR(file) && PTR_ERR(file) == -ENOENT) { DEBUG(DBG_INFO, "Can't access to phys_dir %s\n", pathname); @@ -155,10 +184,8 @@ long remove_phys_dir(const char *pathname, uid_t uid, gid_t gid) filp_close(file,current->files); out: - current->fsuid = saved_uid; - current->fsgid = saved_gid; - current->fs->rootmnt = saved_mnt; - current->fs->root = saved_root; + chroot_to_saved_root(&saved_path); + revert_old_creds(overridden_creds, old_creds); return res; } @@ -180,37 +207,35 @@ out: */ struct file *open_phys_file(char *filename, int flags, int mode, uid_t uid, gid_t gid) { - struct dentry *saved_root; - struct vfsmount *saved_mnt; - uid_t saved_uid; - gid_t saved_gid; + int error = 0; struct file *file; + struct path saved_path; + const struct cred *old_creds; + struct cred *overridden_creds; + + error = change_creds(&overridden_creds, &old_creds, uid, gid); + if (error) + goto out; + + chroot_to_physical_root(&saved_path); DEBUG(DBG_INFO, "Open physical file %s with flags 0x%08x - mode %o\n", filename, flags, mode); - saved_mnt = current->fs->rootmnt; - saved_root = current->fs->root; - saved_uid = current_fsuid(); - saved_gid = current_fsgid(); - - current->fs->rootmnt = init_task.fs->rootmnt; - current->fs->root = init_task.fs->root; - current->fsuid = uid; - current->fsgid = gid; - lockdep_off(); file = filp_open(filename, flags, mode); lockdep_on(); - current->fsuid = saved_uid; - current->fsgid = saved_gid; - current->fs->rootmnt = saved_mnt; - current->fs->root = saved_root; - DEBUG(DBG_INFO, "Open physical file %s done : %p\n", filename, file); +out: + chroot_to_saved_root(&saved_path); + revert_old_creds(overridden_creds, old_creds); + + if (error) + file = ERR_PTR(error); + return file; } @@ -386,22 +411,17 @@ int remove_phys_file(const char *filename, uid_t uid, gid_t gid) struct dentry *dentry; struct inode *dir; int res = 0; - struct dentry *saved_root; - struct vfsmount *saved_mnt; - uid_t saved_uid; - gid_t saved_gid; + struct path saved_path; + const struct cred *old_creds; + struct cred *overridden_creds; DEBUG(DBG_TRACE, "Remove file %s\n", filename); - saved_mnt = current->fs->rootmnt; - saved_root = current->fs->root; - saved_uid = current_fsuid(); - saved_gid = current_fsgid(); - - current->fs->rootmnt = init_task.fs->rootmnt; - current->fs->root = init_task.fs->root; - current->fsuid = uid; - current->fsgid = gid; + res = change_creds(&overridden_creds, &old_creds, uid, gid); + if (res) + goto out; + + chroot_to_physical_root(&saved_path); file = filp_open(filename, O_LARGEFILE|O_RDONLY, 0644); @@ -428,10 +448,8 @@ int remove_phys_file(const char *filename, uid_t uid, gid_t gid) DEBUG(DBG_INFO, "After vfs_unlink res = %d\n", res); out: - current->fsuid = saved_uid; - current->fsgid = saved_gid; - current->fs->rootmnt = saved_mnt; - current->fs->root = saved_root; + chroot_to_saved_root(&saved_path); + revert_old_creds(overridden_creds, old_creds); return res; } commit 0bf1ac82724db2090d893fbdef7a49a1ebc07ca6 Author: Marko Obrovac <mar...@in...> Date: Fri Oct 16 17:05:38 2009 +0000 [MINOR] Fix part (the "read" part) of ticket #3 (nonexisting task_struct members) diff --git a/fs/kdfs/physical_fs.c b/fs/kdfs/physical_fs.c index 689f690..6b91b91 100644 --- a/fs/kdfs/physical_fs.c +++ b/fs/kdfs/physical_fs.c @@ -52,8 +52,8 @@ long create_phys_dir(const char *pathname, saved_mnt = current->fs->rootmnt; saved_root = current->fs->root; - saved_uid = current->fsuid; - saved_gid = current->fsgid; + saved_uid = current_fsuid(); + saved_gid = current_fsgid(); current->fs->rootmnt = init_task.fs->rootmnt; current->fs->root = init_task.fs->root; @@ -123,8 +123,8 @@ long remove_phys_dir(const char *pathname, uid_t uid, gid_t gid) saved_mnt = current->fs->rootmnt; saved_root = current->fs->root; - saved_uid = current->fsuid; - saved_gid = current->fsgid; + saved_uid = current_fsuid(); + saved_gid = current_fsgid(); current->fs->rootmnt = init_task.fs->rootmnt; current->fs->root = init_task.fs->root; @@ -192,8 +192,8 @@ struct file *open_phys_file(char *filename, int flags, int mode, uid_t uid, gid_ saved_mnt = current->fs->rootmnt; saved_root = current->fs->root; - saved_uid = current->fsuid; - saved_gid = current->fsgid; + saved_uid = current_fsuid(); + saved_gid = current_fsgid(); current->fs->rootmnt = init_task.fs->rootmnt; current->fs->root = init_task.fs->root; @@ -395,8 +395,8 @@ int remove_phys_file(const char *filename, uid_t uid, gid_t gid) saved_mnt = current->fs->rootmnt; saved_root = current->fs->root; - saved_uid = current->fsuid; - saved_gid = current->fsgid; + saved_uid = current_fsuid(); + saved_gid = current_fsgid(); current->fs->rootmnt = init_task.fs->rootmnt; current->fs->root = init_task.fs->root; commit a657d43db944e313e4b5975e49c17e0981024f82 Author: Marko Obrovac <mar...@in...> Date: Fri Oct 16 16:22:38 2009 +0000 [FIX] Introduce linux/namei.h (struct nameidata) Closed ticket #2 diff --git a/fs/kdfs/physical_fs.c b/fs/kdfs/physical_fs.c index 36273ca..689f690 100644 --- a/fs/kdfs/physical_fs.c +++ b/fs/kdfs/physical_fs.c @@ -15,6 +15,7 @@ #endif #include <asm/uaccess.h> +#include <linux/namei.h> #include "physical_fs.h" commit 77cc1932ed4ca5bc6708e4bbbfa5753fe72da878 Author: Marko Obrovac <mar...@in...> Date: Fri Oct 16 15:45:34 2009 +0000 [FIX] Conform the debugging to new kerrighed/kernel guidelines diff --git a/fs/kdfs/address_space.c b/fs/kdfs/address_space.c index 59a5b9d..65ae72f 100644 --- a/fs/kdfs/address_space.c +++ b/fs/kdfs/address_space.c @@ -77,13 +77,13 @@ int kdfs_readpage(struct file *file, struct page *page) ASSERT(page != NULL); k_inode=kdfs_ilocalfind(page->mapping->host->i_ino); if (k_inode->content_setid == KDDM_SET_UNUSED) - DEBUG (DBG_KDFS_ADDRSPACE, DBG_PANIC, "No contentset associated.... looks really strange (inode %lu, name %s)\n", + DEBUG (DBG_PANIC, "No contentset associated.... looks really strange (inode %lu, name %s)\n", 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); - DEBUG(DBG_KDFS_ADDRSPACE, DBG_INFO, " Readpage k_page->page : %p and page %p\n", k_page->page, page); + DEBUG(DBG_INFO, " Readpage k_page->page : %p and page %p\n", k_page->page, page); BUG_ON(k_page->page != page); SetPageUptodate(k_page->page); @@ -109,7 +109,7 @@ int kdfs_prepare_write (struct file *file, struct kdfs_page *k_page = NULL; struct kdfs_inode *k_inode = NULL; - DEBUG (DBG_KDFS_ADDRSPACE, DBG_INFO, "Prepare_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); @@ -117,7 +117,7 @@ int kdfs_prepare_write (struct file *file, k_inode=kdfs_ilocalfind(file->f_dentry->d_inode->i_ino); if(k_inode->content_setid == KDDM_SET_UNUSED){ - DEBUG (DBG_KDFS_ADDRSPACE, DBG_PANIC, "No contentset associated.... looks really strange \n"); + DEBUG (DBG_PANIC, "No contentset associated.... looks really strange \n"); } /* TODO PRIORITY 2: test kdfs_get_page returned value */ @@ -141,7 +141,7 @@ int kdfs_commit_write(struct file *file, { struct kdfs_inode *k_inode = NULL; - DEBUG(DBG_KDFS_ADDRSPACE, DBG_INFO, "commit_write for page %ld for file %s" + DEBUG(DBG_INFO, "commit_write for page %ld for file %s" "(ino %lu) (from %u to %u) (count = %d)\n", page->index, file->f_dentry->d_name.name, file->f_dentry->d_inode->i_ino, offset, _to, @@ -149,7 +149,7 @@ int kdfs_commit_write(struct file *file, k_inode = kdfs_ilocalfind(file->f_dentry->d_inode->i_ino); if (k_inode->content_setid == KDDM_SET_UNUSED) - DEBUG(DBG_KDFS_ADDRSPACE, DBG_PANIC, "No contentset associated.... looks really strange \n"); + DEBUG(DBG_PANIC, "No contentset associated.... looks really strange \n"); if (((loff_t)page->index * PAGE_SIZE) + _to > k_inode->inode->i_size) i_size_write(k_inode->inode, ((loff_t)page->index * PAGE_SIZE) + _to); @@ -257,19 +257,19 @@ struct address_space_operations kdfs_aops = { struct kdfs_page *kdfs_get_page(kddm_set_id_t set_id, objid_t obj_id) { - DEBUG(DBG_KDFS_ADDRSPACE, DBG_INFO, "Get page %ld from set %ld\n", obj_id, set_id); + DEBUG(DBG_INFO, "Get page %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_page(kddm_set_id_t set_id, objid_t obj_id) { - DEBUG(DBG_KDFS_ADDRSPACE, DBG_INFO, "Grab page %ld from set %ld\n", obj_id, set_id); + DEBUG(DBG_INFO, "Grab page %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_KDFS_ADDRSPACE, DBG_INFO, "Grab page %ld from set %ld\n", obj_id, set_id); + DEBUG(DBG_INFO, "Grab page %ld from set %ld\n", obj_id, set_id); return kddm_find_object(kddm_def_ns, set_id, obj_id); } @@ -280,13 +280,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_KDFS_ADDRSPACE, DBG_INFO, "Put page %ld from set %ld\n", k_page->obj_id, k_page->set_id); + DEBUG(DBG_INFO, "Put page %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_KDFS_ADDRSPACE, DBG_INFO, "Sync page %ld from set %lu\n", obj_id, set_id); + DEBUG(DBG_INFO, "Sync page %ld from set %lu\n", obj_id, set_id); kddm_sync_frozen_object(kddm_def_ns, set_id, obj_id); } @@ -328,7 +328,7 @@ kddm_set_t *__create_content_kddm_set(kddm_set_id_t set_id, content_data, sizeof(struct content_iolinker_data), KDDM_FT_LINKED); if (IS_ERR(kddm_set)) - DEBUG(DBG_KDFS_ADDRSPACE, DBG_PANIC, "Can't create content kddm_set for inode %ld\n", k_inode->inode->i_ino); + DEBUG(DBG_PANIC, "Can't create content kddm_set for inode %ld\n", k_inode->inode->i_ino); /* We can free all the memory allocated */ kfree(content_data); @@ -372,7 +372,7 @@ int __local_destroy_content_kddm_set(struct kdfs_inode *k_inode) kddm_set = _local_get_kddm_set(kddm_def_ns, k_inode->content_setid); if (!kddm_set) - DEBUG(DBG_KDFS_ADDRSPACE, DBG_INFO, "The associated kddm_set for inode %ld hasn't been instantiated\n", k_inode->inode->i_ino); + DEBUG(DBG_INFO, "The associated kddm_set for inode %ld hasn't been instantiated\n", k_inode->inode->i_ino); else{ /* * TODO PRIORITY 1, Adrien / (Renaud kDDM stuff) @@ -426,10 +426,10 @@ int kdfs_iol_page_alloc(kddm_obj_t *objEntry, kddm_set_t *set, objid_t objid) k_page = kmalloc(sizeof(struct kdfs_page), GFP_KERNEL); ASSERT(k_page); - DEBUG(DBG_KDFS_ADDRSPACE, DBG_INFO, "Before Alloc new page %ld from set %lu \n", objid, set->id); + DEBUG(DBG_INFO, "Before Alloc new page %ld from set %lu \n", objid, set->id); k_page->page = find_get_page(k_mapping, objid); if (!k_page->page) { - DEBUG(DBG_KDFS_ADDRSPACE, DBG_ALERT, + DEBUG(DBG_ALERT, "Can't find page for file/directory = %ld and page id = %ld, So created and locked\n", k_mapping->host->i_ino, objid); k_page->page = find_or_create_page(k_mapping, objid, mapping_gfp_mask(k_mapping) & ~__GFP_FS); @@ -437,7 +437,7 @@ int kdfs_iol_page_alloc(kddm_obj_t *objEntry, kddm_set_t *set, objid_t objid) } else k_page->flags = K_PG_ok; - DEBUG(DBG_KDFS_ADDRSPACE, DBG_INFO, "After Alloc new page %ld from set %lu (page addr=%p count=%d)\n", objid, set->id, k_page->page, page_count(k_page->page)); + DEBUG(DBG_INFO, "After Alloc new page %ld from set %lu (page addr=%p count=%d)\n", objid, set->id, k_page->page, page_count(k_page->page)); k_page->set_id = set->id; k_page->obj_id = objid; @@ -476,13 +476,13 @@ int kdfs_iol_page_first_touch(kddm_obj_t *objEntry, iolinker_data = (struct content_iolinker_data *) set->private_data; - DEBUG(DBG_KDFS_ADDRSPACE, DBG_TRACE, "file/directory = %ld, pageid = %ld gonna to retrieve inode \n", iolinker_data->ino, objid); + DEBUG(DBG_TRACE, "file/directory = %ld, pageid = %ld gonna to retrieve inode \n", iolinker_data->ino, objid); /* WARNING: quite ugly, we should not access to a local inode without locking the corresponding kddm object*/ k_mapping = ((struct content_iolinker_data *) set->private_data)->k_mapping; ASSERT(k_mapping); - DEBUG(DBG_KDFS_ADDRSPACE, DBG_TRACE, "file/directory = %ld, pageid = %ld mapping = %p\n", iolinker_data->ino, objid, k_mapping); + DEBUG(DBG_TRACE, "file/directory = %ld, pageid = %ld mapping = %p\n", iolinker_data->ino, objid, k_mapping); /* Allocate kdfs_page and retrieve page address */ k_page = kmalloc(sizeof(struct kdfs_page), GFP_KERNEL); @@ -500,13 +500,13 @@ int kdfs_iol_page_first_touch(kddm_obj_t *objEntry, k_page->page = find_get_page(k_mapping, objid); if (!k_page->page) { - DEBUG(DBG_KDFS_ADDRSPACE, DBG_ALERT, "Can't find page for file/directory = %ld and page id = %ld, So created and locked\n", iolinker_data->ino, objid); + DEBUG(DBG_ALERT, "Can't find page for file/directory = %ld and page id = %ld, So created and locked\n", iolinker_data->ino, objid); k_page->page = find_or_create_page(k_mapping, objid, (mapping_gfp_mask(k_mapping)|__GFP_ZERO) & ~__GFP_FS); k_page->flags = K_PG_locked; } else k_page->flags = K_PG_ok; - DEBUG(DBG_KDFS_ADDRSPACE, DBG_ALERT, "After find Page count=%d\n", page_count(k_page->page)); + DEBUG(DBG_ALERT, "After find Page count=%d\n", page_count(k_page->page)); page_addr = (char *) kmap(k_page->page); pos = (loff_t)objid * PAGE_SIZE; @@ -516,14 +516,14 @@ int kdfs_iol_page_first_touch(kddm_obj_t *objEntry, kunmap(k_page->page); if (!IS_ERR(k_page->page)) - DEBUG(DBG_KDFS_ADDRSPACE, DBG_ALERT, "Can't read page for file/directory = %ld and page id = %ld\n", iolinker_data->ino, objid); + DEBUG(DBG_ALERT, "Can't read page for file/directory = %ld and page id = %ld\n", iolinker_data->ino, objid); objEntry->object = (void *) k_page; /* TODO PRIORITY 2: should release in kdfs_put_page instead? */ //page_cache_release(k_page->page); - DEBUG(DBG_KDFS_ADDRSPACE, DBG_ALERT, "After read Page count=%d\n", page_count(k_page->page)); + DEBUG(DBG_ALERT, "After read Page count=%d\n", page_count(k_page->page)); PRINT_FUNCTION_EXIT; return res; @@ -543,7 +543,7 @@ int kdfs_iol_page_insert(kddm_obj_t *objEntry, kddm_set_t *set, objid_t objid) PRINT_FUNCTION_NAME; k_page = (struct kdfs_page *) objEntry->object; - DEBUG(DBG_KDFS_ADDRSPACE, DBG_ALERT, "Entering page count=%d\n", page_count(k_page->page)); + DEBUG(DBG_ALERT, "Entering page count=%d\n", page_count(k_page->page)); /* * Set the private field of the page to get callback when it is @@ -562,7 +562,7 @@ int kdfs_iol_page_insert(kddm_obj_t *objEntry, kddm_set_t *set, objid_t objid) } page_cache_release(k_page->page); - DEBUG(DBG_KDFS_ADDRSPACE, DBG_ALERT, "Exiting page count=%d\n", page_count(k_page->page)); + DEBUG(DBG_ALERT, "Exiting page count=%d\n", page_count(k_page->page)); PRINT_FUNCTION_EXIT; return 0; } @@ -587,7 +587,7 @@ int kdfs_iol_page_export (struct rpc_desc *desc, res = rpc_pack(desc, 0, page_addr, PAGE_SIZE); if (res < 0) - DEBUG(DBG_KDFS_ADDRSPACE, DBG_ALERT, "can't pack export page (res=%d)\n", res); + DEBUG(DBG_ALERT, "can't pack export page (res=%d)\n", res); kunmap_atomic(page_addr, KM_USER0); @@ -613,12 +613,12 @@ int kdfs_iol_page_invalidate(kddm_obj_t *objEntry, kddm_set_t *set, objid_t obji PRINT_FUNCTION_NAME; SetPageLocked(k_page->page); - DEBUG(DBG_KDFS_ADDRSPACE, DBG_ALERT, "Page count before =%d\n", page_count(k_page->page)); + DEBUG(DBG_ALERT, "Page count before =%d\n", page_count(k_page->page)); remove_from_page_cache(k_page->page); ClearPagePrivate(k_page->page); unlock_page(k_page->page); page_cache_release(k_page->page); - DEBUG(DBG_KDFS_ADDRSPACE, DBG_ALERT, "Page after count=%d\n", page_count(k_page->page)); + DEBUG(DBG_ALERT, "Page after count=%d\n", page_count(k_page->page)); /* * TODO PRIORITY 2: Adrien * Page Count should be probably decremented @@ -675,7 +675,7 @@ int kdfs_iol_page_sync(kddm_obj_t *objEntry, kddm_set_t *set, objid_t objid) ASSERT(k_page != NULL); ASSERT(k_page->page != NULL); - DEBUG(DBG_KDFS_ADDRSPACE, DBG_INFO, "Try to sync page %ld (page addr %p) of set %lu\n", objid, k_page->page, set->id); + DEBUG(DBG_INFO, "Try to sync page %ld (page addr %p) of set %lu\n", objid, k_page->page, set->id); file_pos = ((loff_t)objid * PAGE_SIZE) + k_page->offset; page_addr = (char *) kmap(k_page->page); @@ -707,7 +707,7 @@ int kdfs_iol_page_put(kddm_obj_t *objEntry, kddm_set_t *set, objid_t objid) ASSERT(objEntry != NULL); k_page = (struct kdfs_page *)objEntry->object; - DEBUG(DBG_KDFS_ADDRSPACE, DBG_ALERT, "Page count = %d\n", page_count(k_page->page)); + DEBUG(DBG_ALERT, "Page count = %d\n", page_count(k_page->page)); //page_cache_release(k_page->page); @@ -735,12 +735,12 @@ int kdfs_iol_page_remove(void *object, struct kddm_set *set, objid_t objid) * we are not called by the VFS */ SetPageLocked(k_page->page); - DEBUG(DBG_KDFS_ADDRSPACE, DBG_ALERT, "Page count before =%d\n", page_count(k_page->page)); + DEBUG(DBG_ALERT, "Page count before =%d\n", page_count(k_page->page)); remove_from_page_cache(k_page->page); ClearPagePrivate(k_page->page); unlock_page(k_page->page); page_cache_release(k_page->page); - DEBUG(DBG_KDFS_ADDRSPACE, DBG_ALERT, "Page after count=%d\n", page_count(k_page->page)); + DEBUG(DBG_ALERT, "Page after count=%d\n", page_count(k_page->page)); } PRINT_FUNCTION_EXIT; @@ -776,7 +776,7 @@ int content_instantiate(kddm_set_t *kddm_set, void *private_data, int master) ASSERT(kddm_set->private_data != NULL); content_data = (struct content_iolinker_data *) kddm_set->private_data; - DEBUG(DBG_KDFS_ADDRSPACE, DBG_INFO, "Instantiate kddm %ld with ino : %ld\n", kddm_set->id, content_data->ino); + DEBUG(DBG_INFO, "Instantiate kddm %ld with ino : %ld\n", kddm_set->id, content_data->ino); if (kddm_set->def_owner == kerrighed_node_id) { content_data->phys_dirname = kmalloc(PATH_MAX, GFP_KERNEL); @@ -811,7 +811,7 @@ int content_instantiate(kddm_set_t *kddm_set, void *private_data, int master) content_data->current_meta = NULL; } } else { - DEBUG (DBG_KDFS_ADDRSPACE, DBG_INFO, "Nothing TODO, file is not on this node\n"); + DEBUG (DBG_INFO, "Nothing TODO, file is not on this node\n"); content_data->phys_dirname = NULL; content_data->phys_file = NULL; } @@ -820,16 +820,16 @@ int content_instantiate(kddm_set_t *kddm_set, void *private_data, int master) /* Retrieve the local ref to the k_mapping object */ inode = ilookup(k_sb->sb, content_data->ino); if (inode) { - DEBUG(DBG_KDFS_ADDRSPACE, DBG_INFO, "K_mapping from the cache\n"); + DEBUG(DBG_INFO, "K_mapping from the cache\n"); content_data->k_mapping = inode->i_mapping; iput(inode); } else { - DEBUG(DBG_KDFS_ADDRSPACE, DBG_INFO, "K_mapping will be retrieve from iget\n"); + DEBUG(DBG_INFO, "K_mapping will be retrieve from iget\n"); inode = iget(k_sb->sb, content_data->ino); content_data->k_mapping = inode->i_mapping; } if (!content_data->k_mapping) - DEBUG(DBG_KDFS_ADDRSPACE, DBG_PANIC, "k_mapping was not cleanly initialized\n"); + DEBUG(DBG_PANIC, "k_mapping was not cleanly initialized\n"); __kdfs_putsb(k_sb); PRINT_FUNCTION_EXIT; diff --git a/fs/kdfs/debug_kdfs.h b/fs/kdfs/debug_kdfs.h index 15df5b1..51bf3b0 100644 --- a/fs/kdfs/debug_kdfs.h +++ b/fs/kdfs/debug_kdfs.h @@ -16,6 +16,7 @@ /* Common headers */ #include <asm-generic/bug.h> #include <linux/err.h> +#include <linux/kernel.h> /* Kerrighed headers (dynamical debugging) */ #include <kerrighed/debug.h> @@ -25,54 +26,24 @@ #define DBG_PANIC 0 #define DBG_ALERT 1 #define DBG_WARNING 2 -#define DBG_TRACE 3 +#define DBG_TRACE 3 #define DBG_INFO 4 -/* DEBUG type */ -#define DBG_KDFS_GENERAL "general" /* General debug */ -#define DBG_KDFS_SUPERBLK "superblock" /* Super Block */ -#define DBG_KDFS_INODE "inode" /* Inode Management */ -#define DBG_KDFS_DIR "dir-mgmt" /* Dir management */ -#define DBG_KDFS_FILE "file-mgmt" /* File management */ -#define DBG_KDFS_ADDRSPACE "addrspace" /* Page management */ -#define DBG_KDFS_NATIVEFS "native-fs" /* Native File System Accesses */ - -static inline struct dentry * init_kdfs_debug(void) -{ -#ifdef NDEBUG - return NULL; -#else - /* The default level is set by the second parameter */ - struct dentry *d = debug_define("kDFS", DBG_PANIC); - - DEBUG_MASK("kDFS", DBG_KDFS_GENERAL); - DEBUG_MASK("kDFS", DBG_KDFS_SUPERBLK); - DEBUG_MASK("kDFS", DBG_KDFS_INODE); - DEBUG_MASK("kDFS", DBG_KDFS_DIR); - DEBUG_MASK("kDFS", DBG_KDFS_FILE); - DEBUG_MASK("kDFS", DBG_KDFS_ADDRSPACE); - DEBUG_MASK("kDFS", DBG_KDFS_NATIVEFS); - - return d; -#endif -} - - -//#define KDFS_DEBUG_LEVEL 4 +#define KDFS_DEBUG_LEVEL 4 #ifdef DEBUG #undef DEBUG #endif #ifdef NDEBUG -# define DEBUG(type, level, format, args...) do {} while(0) +# define DEBUG(level, format, args...) do {} while(0) #else -# define DEBUG(type, level, format, args...) \ +# define DEBUG(level, format, args...) \ do { \ - if (match_debug("kDFS", type, level)) { \ - printk ("%s - (%s) - %d : ", KDFS_PART, __PRETTY_FUNCTION__, \ + if (KDFS_DEBUG_LEVEL <= level || level == DBG_PANIC) { \ + pr_debug("%s - (%s) - %d : ", KDFS_PART, __PRETTY_FUNCTION__, \ current->pid) ; \ - printk (format, ## args) ; \ + pr_debug(format, ## args) ; \ } \ if(level == DBG_PANIC)\ BUG();\ @@ -85,8 +56,8 @@ do { \ /* FUNCTION NAME : ENTER and EXIT */ // TODO: redefine the following macros to take into account debug level ! -#define PRINT_FUNCTION_NAME DEBUG(DBG_KDFS_GENERAL, DBG_TRACE, "%s\n", __PRETTY_FUNCTION__) -#define PRINT_FUNCTION_EXIT DEBUG(DBG_KDFS_GENERAL, DBG_TRACE, "%s exited\n", __PRETTY_FUNCTION__) +#define PRINT_FUNCTION_NAME DEBUG(DBG_TRACE, "%s\n", __PRETTY_FUNCTION__) +#define PRINT_FUNCTION_EXIT DEBUG(DBG_TRACE, "%s exited\n", __PRETTY_FUNCTION__) /* ASSERT and BUG ON */ @@ -101,7 +72,7 @@ do { \ #define ASSERT(expr) \ do {\ if ( !(expr) ) {\ - printk ("PANIC : ASSERT " #expr " failed in %s \ + pr_debug("PANIC : ASSERT " #expr " failed in %s \ line %d\n", __PRETTY_FUNCTION__, __LINE__ ); \ BUG(); \ } \ diff --git a/fs/kdfs/dir.c b/fs/kdfs/dir.c index 1679156..644d248 100644 --- a/fs/kdfs/dir.c +++ b/fs/kdfs/dir.c @@ -59,7 +59,7 @@ struct kdfs_dir_entry *kdfs_grab_entry (struct kdfs_inode *dir, const char *file struct page *tmp_page = NULL; void *page_addr = NULL ; - DEBUG (DBG_KDFS_DIR, DBG_INFO, + DEBUG (DBG_INFO, "Look up for entry %s in directory %ld\n", filename, dir->inode->i_ino); @@ -75,11 +75,11 @@ struct kdfs_dir_entry *kdfs_grab_entry (struct kdfs_inode *dir, const char *file } /* Parse directory dentries */ - DEBUG (DBG_KDFS_DIR, DBG_INFO, "Start to look inside directory\n"); + DEBUG (DBG_INFO, "Start to look inside directory\n"); do { *k_page = kdfs_grab_page(dir->content_setid, pageid); if (IS_ERR(*k_page)) - DEBUG (DBG_KDFS_DIR, DBG_PANIC, + DEBUG (DBG_PANIC, "Can't grab page %ld for the directory %ld", pageid, dir->content_setid); @@ -89,7 +89,7 @@ struct kdfs_dir_entry *kdfs_grab_entry (struct kdfs_inode *dir, const char *file /* For each entry contained in the page */ do { - DEBUG (DBG_KDFS_DIR, DBG_INFO, + DEBUG (DBG_INFO, "Grab page %ld:" "page addr %p, dentry_addr %p (file size %lld)\n", pageid, page_addr, dentry_addr, @@ -98,7 +98,7 @@ struct kdfs_dir_entry *kdfs_grab_entry (struct kdfs_inode *dir, const char *file dir_entry = (struct kdfs_dir_entry *) dentry_addr; /* Did we find the right entry */ - DEBUG (DBG_KDFS_DIR, DBG_INFO, "filelen %d dirfilelen %d, filename %s dirname %s, dirlen %d (dirino %ld)\n", + DEBUG (DBG_INFO, "filelen %d dirfilelen %d, filename %s dirname %s, dirlen %d (dirino %ld)\n", filename_len, dir_entry->name_len, filename, dir_entry->name,dir_entry->rec_len, dir_entry->ino); if (dir_entry->name_len == filename_len && strncmp (dir_entry->name, filename, filename_len) == 0) @@ -122,7 +122,7 @@ struct kdfs_dir_entry *kdfs_grab_entry (struct kdfs_inode *dir, const char *file } // end if there are some entries - DEBUG (DBG_KDFS_DIR, DBG_INFO, "Look up for file %s in directory %ld : notfound \n", + DEBUG (DBG_INFO, "Look up for file %s in directory %ld : notfound \n", filename, dir->inode->i_ino); // TODO PRIORITY 1: put_kddm_set required a reference on the set. // I have to add a reference inside kdfs_page structure :( @@ -130,7 +130,7 @@ struct kdfs_dir_entry *kdfs_grab_entry (struct kdfs_inode *dir, const char *file return NULL; found: - DEBUG (DBG_KDFS_DIR, DBG_INFO, + DEBUG (DBG_INFO, "Look up for file %s in directory %ld: found : %p\n", filename, dir->inode->i_ino, dir_entry); return dir_entry; @@ -162,7 +162,7 @@ struct kdfs_dir_entry *kdfs_find_entry(struct kdfs_inode *dir, struct page *tmp_page = NULL; void *page_addr = NULL; - DEBUG(DBG_KDFS_DIR, DBG_INFO, + DEBUG(DBG_INFO, "Look up for entry %s in directory %ld\n", filename, dir->inode->i_ino); @@ -178,12 +178,12 @@ struct kdfs_dir_entry *kdfs_find_entry(struct kdfs_inode *dir, } /* Parse directory dentries */ - DEBUG (DBG_KDFS_DIR, DBG_INFO, + DEBUG (DBG_INFO, "Start to look inside directory \n"); do { *k_page = kdfs_get_page(dir->content_setid, pageid); if (IS_ERR(*k_page)) - DEBUG(DBG_KDFS_DIR, DBG_PANIC, + DEBUG(DBG_PANIC, "Can't get page %ld for the directory %ld\n", pageid, dir->content_setid); @@ -193,14 +193,14 @@ struct kdfs_dir_entry *kdfs_find_entry(struct kdfs_inode *dir, /* For each entry contained in the page */ do { - DEBUG(DBG_KDFS_DIR, DBG_INFO, + DEBUG(DBG_INFO, "page addr %p, dentry_addr %p (file size %lld)\n", page_addr, dentry_addr, dir->inode->i_size); /* Get the directory entry */ dir_entry = (struct kdfs_dir_entry *) dentry_addr; /* Did we find the right entry */ - DEBUG(DBG_KDFS_DIR, DBG_INFO, + DEBUG(DBG_INFO, "filelen %d... [truncated message content] |