From: Marko O. <d0...@us...> - 2010-01-13 14:05:24
|
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 discards c6db9af7d662f1f6f50ec7da423000a11c1ad145 (commit) discards aac7aa4efd9eccdfbeaa04c04db7928e8b439110 (commit) discards 159422433e1cbebdd6b3df6edc5e63a77eb17941 (commit) discards a5960d10bd3d0e0b3f67f01a9d2bff5c4d9a76db (commit) discards 6d804a59635d22cd8ccecc171681223bae641978 (commit) discards 727feafdfdb67c56faf8936a555306ac12ba83bd (commit) discards d922ea7c84da39b7ec2ae3d5b05f4e422f6c7495 (commit) discards 42cfa16f195acdd55c4c99ab0ac577eabbf80823 (commit) discards 9fee3b665950ede2d8d578add26530e5bb5a8249 (commit) discards 5144e43b2e59b913bfe8012cf26dc612a6829091 (commit) discards 59d4826cea6aa3f17f387cea83a045f4aaea1fd5 (commit) discards 2e86087f0a4bd2f6e419803905f8cedb6311e81a (commit) discards c61ed4f2effa24ddc2729d4a9a7b9b812ca73f8a (commit) discards a87005035a822077ade4b96f7ae9afe09b6f2001 (commit) discards 0ed4e289e003fb2353b318d21cf17060074e6f69 (commit) discards 942cf87a46b58f3e096826d13ee7ad0ec64db17d (commit) discards 9dedc3c491c2774afbed77d87864433a016080bb (commit) discards 250cc5ac019298154f5712d8c227d7fc3aac99ba (commit) discards 87111978622231b06aa57a74ad350c7cac7d9ac3 (commit) discards e9b2900ac5dcea18ed708cf4688628437606aacd (commit) via e941db48a032fb614ebbbdfe59947a9e5e3534cb (commit) via af683a1fbdbab0cb30ce009103873e11e41dda00 (commit) via 1f74cfe1b051faaa60e5a0a2bebe242e7a93d5c4 (commit) via 665e738693c1a0eaccee8aa00d34df938dc82a51 (commit) via e988f0cc6ef3a09422e24030a7ce586840808218 (commit) via 954ebb4f87b09c2583e557574f3e5f56da9c6a2c (commit) via a15cda30e2116e4a0deb4f5508a2dc6efd9a9ae1 (commit) via 1474819c8521d263dedfdeacc86dfeb9220c3665 (commit) via 09a34f7bd89cd0bb13ccc8594c0d3fc787a0401f (commit) via 149ed630a8943a7b00b4c68710fddb054cfacb2d (commit) via 9c7155504e2c4d60e5ad9f24509a388206bb22a6 (commit) via cf749454a37ec18fdaef3e87c49868b745f8d7d2 (commit) via ba883349dd1a5baafa210eb902665363f1ba9f41 (commit) via bd8bd26b267146df7e49e3338f9679fdcada585c (commit) via a848c99a02723cd8cb8a03830f47713640cf7976 (commit) via f3fa022fae876a86e2075229de1e1e29b9ce1ea1 (commit) via 02bbde5b03504121dd9d0af733d8e55a30e0ada9 (commit) via c118ec7202dd53b1fee58eb8fca3535ef04f5cf2 (commit) via f5a04976cc51b2835361b779f5e458b059307859 (commit) via 408200feebbbc22d70cf5ed45a3f8a87551bdd92 (commit) via fd93f5e6b8527fa2e26673808fe725a89f307aaf (commit) via 219b025717142a0ea244798bb5fbf104e1af79de (commit) via 07fde119b640c73a84fab3671006ae15e91dcb76 (commit) via 3e78c3f8f6ccdea35ec35a0010f6289e7538124b (commit) via 9979402bc16319a4b32df4919b78b84b06f9f905 (commit) via dfc958f2d6ea3ca6d80dc294d23e18b5dd9d66b1 (commit) via ca0974f08c3530809f832b51d2b314622bf3ec28 (commit) via f91427f8280a09d05126e3402084a211c97694b2 (commit) via b25d6bdc3234fc9b0453a82a7112a582b04cbe0c (commit) via 03f5862a6e7dfc16f1946c2854c02c2e7c7f8b48 (commit) via 274b61ee980b7587b21fc0e48eb06bd91f09bb88 (commit) via e5b21886edb7671a009fc6f185129fd75c96a7d7 (commit) via 25aea9bc2f8a73b682af071f81c85b047213b2f0 (commit) via 25bc94fd5572782b3fa41ff48f17e885099952d1 (commit) via 0315473364cde4a1eb142754f444bb368692d200 (commit) via 6ac7ad7c39138f15ddec89db1a9bf79b79980356 (commit) via 876c777f908744a2aa0c3500386b543cfd3521b8 (commit) via 9eb1359cdfbbf39b13b68bef03cb65e20db81f34 (commit) via d008878909eacfcb0faeaed9ea8782bd744f3956 (commit) via ad90d51a605ce1e0dc08484d988cb71541af9fd4 (commit) via 87985e4509613ed6d14d3fac9e08345008371c12 (commit) This update added new revisions after undoing existing revisions. That is to say, the old revision is not a strict subset of the new revision. This situation occurs when you --force push a change and generate a repository containing something like this: * -- * -- B -- O -- O -- O (c6db9af7d662f1f6f50ec7da423000a11c1ad145) \ N -- N -- N (e941db48a032fb614ebbbdfe59947a9e5e3534cb) When this happens we assume that you've already had alert emails for all of the O revisions, and so we here report only the revisions in the N branch from the common base, B. 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 e941db48a032fb614ebbbdfe59947a9e5e3534cb Author: Marko Obrovac <mar...@in...> Date: Tue Jan 12 16:15:05 2010 +0000 Bug fix: * fixed the rpc problem - turned out the definition of import/export functions in struct iolinker_struct had been changed, which caused a wrong pointer assignment. diff --git a/fs/kdfs/address_space.c b/fs/kdfs/address_space.c index 5b60704..b66bd6c 100644 --- a/fs/kdfs/address_space.c +++ b/fs/kdfs/address_space.c @@ -630,7 +630,9 @@ int kdfs_iol_page_insert(kddm_obj_t *objEntry, kddm_set_t *set, objid_t objid) * @param objid Object id of the object */ int kdfs_iol_page_export (struct rpc_desc *desc, - kddm_obj_t *objEntry) + struct kddm_set *set, + struct kddm_obj *objEntry, + objid_t objid) { struct kdfs_page *k_page = (struct kdfs_page *)objEntry->object; int res = 0; @@ -689,7 +691,10 @@ int kdfs_iol_page_invalidate(kddm_obj_t *objEntry, kddm_set_t *set, objid_t obji * @param object The object to import data in. * @param desc Network descriptor exploited by rpc_pack() */ -int kdfs_iol_page_import(kddm_obj_t *objEntry, struct rpc_desc *desc) +int kdfs_iol_page_import(struct rpc_desc *desc, + struct kddm_set *set, + struct kddm_obj *objEntry, + objid_t objid) { int res = 0; struct kdfs_page *kdfs_page = (struct kdfs_page*) objEntry->object; diff --git a/fs/kdfs/address_space.h b/fs/kdfs/address_space.h index 5a7ac7a..491695c 100644 --- a/fs/kdfs/address_space.h +++ b/fs/kdfs/address_space.h @@ -112,9 +112,9 @@ 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); int kdfs_iol_page_first_touch(kddm_obj_t *objEntry, kddm_set_t *set, objid_t objid, int flags); int kdfs_iol_page_insert(kddm_obj_t *objEntry, kddm_set_t *set, objid_t objid); -int kdfs_iol_page_export (struct rpc_desc *desc, kddm_obj_t *objEntry); +int kdfs_iol_page_export (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, objid_t objid); int kdfs_iol_page_invalidate(kddm_obj_t *objEntry, kddm_set_t *set, objid_t objid); -int kdfs_iol_page_import (kddm_obj_t *objEntry, struct rpc_desc *desc); +int kdfs_iol_page_import (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *objEntry, objid_t objid); int kdfs_iol_page_sync(kddm_obj_t *objEntry, kddm_set_t *set, objid_t objid); int kdfs_iol_page_put(kddm_obj_t *objEntry, kddm_set_t *set, objid_t objid); int kdfs_iol_page_remove(void *object, struct kddm_set *set, objid_t objid); diff --git a/fs/kdfs/inode.c b/fs/kdfs/inode.c index f126cb8..c6d2e67 100644 --- a/fs/kdfs/inode.c +++ b/fs/kdfs/inode.c @@ -1179,7 +1179,9 @@ int kdfs_iol_inode_first_touch(kddm_obj_t *objEntry, * */ int kdfs_iol_inode_export_object(struct rpc_desc *desc, - kddm_obj_t *objEntry) + struct kddm_set *set, + struct kddm_obj *objEntry, + objid_t objid) { struct kdfs_inode *src = (struct kdfs_inode *) objEntry->object; struct kdfs_netinode net_dest; @@ -1201,7 +1203,10 @@ int kdfs_iol_inode_export_object(struct rpc_desc *desc, * @param object The object to import data in. * @param desc Network descriptor exploited by rpc_pack() */ -int kdfs_iol_inode_import_object(kddm_obj_t *objEntry, struct rpc_desc *desc) +int kdfs_iol_inode_import_object(struct rpc_desc *desc, + struct kddm_set *set, + struct kddm_obj *objEntry, + objid_t objid) { int res = 0; struct kdfs_inode *inode_dst = (struct kdfs_inode*) objEntry->object; diff --git a/fs/kdfs/super.c b/fs/kdfs/super.c index 1c2c87b..8eabce5 100644 --- a/fs/kdfs/super.c +++ b/fs/kdfs/super.c @@ -1886,7 +1886,9 @@ static inline void __kdfs_import_kdfs_cwsb(struct kdfs_cw_sb *dest, struct kdfs_ * @param objid Identifier of the object in the kDDM set */ int kdfs_iol_sb_export(struct rpc_desc *desc, - kddm_obj_t *objEntry) + struct kddm_set *set, + struct kddm_obj *objEntry, + objid_t objid) { struct kdfs_cw_sb *k_cw_sb = NULL; struct kdfs_super_block *k_sb = NULL; @@ -1941,8 +1943,10 @@ int kdfs_iol_sb_export(struct rpc_desc *desc, * @param object The object to import data in. * @param desc Network descriptor exploited by rpc_pack() */ -int kdfs_iol_sb_import (kddm_obj_t *objEntry, - struct rpc_desc *desc) +int kdfs_iol_sb_import (struct rpc_desc *desc, + struct kddm_set *set, + struct kddm_obj *objEntry, + objid_t objid) { int res = 0; struct kdfs_generic_sb *kgsb = objEntry->object; commit af683a1fbdbab0cb30ce009103873e11e41dda00 Author: Marko Obrovac <mar...@in...> Date: Thu Oct 29 08:33:39 2009 +0000 Substitute pr_debug with printk as to be able to always see kdfs debug output diff --git a/fs/kdfs/debug_kdfs.h b/fs/kdfs/debug_kdfs.h index a5a377c..55b1623 100644 --- a/fs/kdfs/debug_kdfs.h +++ b/fs/kdfs/debug_kdfs.h @@ -41,9 +41,9 @@ # define DEBUG(level, format, args...) \ do { \ if (KDFS_DEBUG_LEVEL >= level || level == DBG_PANIC) { \ - pr_debug("%s - (%s) - %d : ", KDFS_PART, __PRETTY_FUNCTION__, \ + /*pr_debug*/printk("%s - (%s) - %d : ", KDFS_PART, __PRETTY_FUNCTION__, \ current->pid) ; \ - pr_debug(format, ## args) ; \ + /*pr_debug*/printk(format, ## args) ; \ } \ if(level == DBG_PANIC)\ BUG();\ commit 1f74cfe1b051faaa60e5a0a2bebe242e7a93d5c4 Merge: ae83ede 665e738 Author: Marko Obrovac <mar...@in...> Date: Wed Jan 13 13:40:01 2010 +0000 Merge branch 'master' of git://mirrors.git.kernel.org/cluster/kerrighed/kernel into clean-merge Conflicts: include/kddm/io_linker.h include/kddm/kddm_set.h diff --cc include/kddm/io_linker.h index 41abb51,c56425c..b6fa1e0 --- a/include/kddm/io_linker.h +++ b/include/kddm/io_linker.h @@@ -64,7 -64,7 +64,8 @@@ enu STRING_LIST_LINKER, KDDM_TEST_LINKER, MM_STRUCT_LINKER, + PIDMAP_MAP_LINKER, + SB_LINKER, MAX_IO_LINKER, /* MUST always be the last one */ } ; diff --cc include/kddm/kddm_set.h index 6853124,5632a6c..9cc9c99 --- a/include/kddm/kddm_set.h +++ b/include/kddm/kddm_set.h @@@ -67,46 -71,35 +71,47 @@@ enu enum { KDDM_SET_UNUSED, // 0 - TASK_KDDM_ID, // 1 - SIGNAL_STRUCT_KDDM_ID, // 2 - SIGHAND_STRUCT_KDDM_ID, // 3 - STATIC_NODE_INFO_KDDM_ID, // 4 - STATIC_CPU_INFO_KDDM_ID, // 5 - DYNAMIC_NODE_INFO_KDDM_ID, // 6 - DYNAMIC_CPU_INFO_KDDM_ID, // 7 - APP_KDDM_ID, // 8 - SHMID_KDDM_ID, // 9 - SHMKEY_KDDM_ID, // 10 - SHMMAP_KDDM_ID, // 11 - SEMARRAY_KDDM_ID, // 12 - SEMKEY_KDDM_ID, // 13 - SEMMAP_KDDM_ID, // 14 - SEMUNDO_KDDM_ID, // 15 - MSG_KDDM_ID, // 16 - MSGKEY_KDDM_ID, // 17 - MSGMAP_KDDM_ID, // 18 - MSGMASTER_KDDM_ID, // 19 - PID_KDDM_ID, // 20 - CHILDREN_KDDM_ID, // 21 - DVFS_FILE_STRUCT_KDDM_ID, // 22 - GLOBAL_LOCK_KDDM_SET_ID, // 23 - GLOBAL_CONFIG_KDDM_SET_ID, // 24 - KDDM_TEST4_DIST, // 25 - KDDM_TEST4_LOC, // 26 - KDDM_TEST4096, // 27 - MM_STRUCT_KDDM_ID, // 28 + KDFS_FILE_KDDM__ID, // 1 + KDFS_INODE_KDDM_ID, // 2 + KDFS_DENTRY_KDDM_ID, // 3 + TASK_KDDM_ID, // 4 + SIGNAL_STRUCT_KDDM_ID, // 5 + SIGHAND_STRUCT_KDDM_ID, // 6 + STATIC_NODE_INFO_KDDM_ID, // 7 + STATIC_CPU_INFO_KDDM_ID, // 8 + DYNAMIC_NODE_INFO_KDDM_ID, // 9 + DYNAMIC_CPU_INFO_KDDM_ID, // 10 + MEMORY_NODE_INFO_KDDM_ID, // 11 + STREAM_KDDM_ID, // 12 + SOCKET_KDDM_ID, // 13 + APP_KDDM_ID, // 14 + FUTEX_KDDM_ID, // 15 + SHMID_KDDM_ID, // 16 + SHMKEY_KDDM_ID, // 17 + SHMMAP_KDDM_ID, // 18 + SEMARRAY_KDDM_ID, // 19 + SEMKEY_KDDM_ID, // 20 + SEMMAP_KDDM_ID, // 21 + SEMUNDO_KDDM_ID, // 22 + MSG_KDDM_ID, // 23 + MSGKEY_KDDM_ID, // 24 + MSGMAP_KDDM_ID, // 25 + MSGMASTER_KDDM_ID, // 26 + DSTREAM_KDDM_ID, // 27 + DSTREAM_SOCKET_BASE, // 28 + PIDMAP_MAP_KDDM_ID, // 29 + DSTREAM_SOCKET_MAX = DSTREAM_SOCKET_BASE + AF_MAX, // + 32 = 60 + DSTREAM_PIPE_KDDM_ID, // 61 + PID_KDDM_ID, // 62 + CHILDREN_KDDM_ID, // 63 + DVFS_FILE_STRUCT_KDDM_ID, // 64 + GLOBAL_LOCK_KDDM_SET_ID, // 65 + GLOBAL_CONFIG_KDDM_SET_ID, // 66 + KDDM_TEST4_DIST, // 67 + 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 665e738693c1a0eaccee8aa00d34df938dc82a51 Author: Louis Rilling <lou...@ke...> Date: Thu Dec 17 18:19:14 2009 +0100 [BUGFIX] epm: Fix task_delay_info leak on import error Signed-off-by: Louis Rilling <lou...@ke...> diff --git a/kernel/fork.c b/kernel/fork.c index e5f883b..97317ca 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -1664,6 +1664,9 @@ bad_fork_cleanup_policy: bad_fork_cleanup_cgroup: #endif cgroup_exit(p, cgroup_callbacks_done); +#ifdef CONFIG_KRG_EPM + if (!krg_current) +#endif delayacct_tsk_free(p); if (p->binfmt) module_put(p->binfmt->module); diff --git a/kerrighed/epm/ghost.c b/kerrighed/epm/ghost.c index 7a0cd9e..d4b4147 100644 --- a/kerrighed/epm/ghost.c +++ b/kerrighed/epm/ghost.c @@ -1249,8 +1249,10 @@ static int import_delays(struct epm_action *action, } err = ghost_read(ghost, delays, sizeof(*delays)); - if (err) + if (err) { + kmem_cache_free(delayacct_cache, delays); goto out; + } spin_lock_init(&delays->lock); task->delays = delays; commit e988f0cc6ef3a09422e24030a7ce586840808218 Author: Matthieu Fertré <mat...@ke...> Date: Tue Dec 22 11:36:14 2009 +0100 IPC Msg queue: msgsnd syscall is automatically restarted after being interrupted by a Kerrighed action. diff --git a/ipc/msg.c b/ipc/msg.c index 98988c0..5a914b6 100644 --- a/ipc/msg.c +++ b/ipc/msg.c @@ -817,6 +817,16 @@ long do_msgsnd(int msqid, long mtype, void __user *mtext, #endif ss_del(&s); +#if defined(CONFIG_KRG_IPC) && defined(CONFIG_KRG_EPM) + if (krg_action_any_pending(current)) { +#ifdef CONFIG_KRG_DEBUG + printk("%s:%d - action kerrighed! --> need replay!!\n", + __PRETTY_FUNCTION__, __LINE__); +#endif + err = -ERESTARTSYS; + goto out_unlock_free; + } +#endif if (signal_pending(current)) { err = -ERESTARTNOHAND; goto out_unlock_free; commit 954ebb4f87b09c2583e557574f3e5f56da9c6a2c Author: Matthieu Fertré <mat...@ke...> Date: Tue Dec 22 11:35:53 2009 +0100 IPC Msg queue: msgrcv syscall is automatically restarted after being interrupted by a Kerrighed action. diff --git a/ipc/msg.c b/ipc/msg.c index 9bc05ba..98988c0 100644 --- a/ipc/msg.c +++ b/ipc/msg.c @@ -44,6 +44,9 @@ #include "util.h" #ifdef CONFIG_KRG_IPC #include "krgmsg.h" +#ifdef CONFIG_KRG_EPM +#include <kerrighed/action.h> +#endif #endif /* @@ -1069,6 +1072,17 @@ long do_msgrcv(int msqid, long *pmtype, void __user *mtext, goto out_unlock; list_del(&msr_d.r_list); + +#if defined(CONFIG_KRG_IPC) && defined(CONFIG_KRG_EPM) + if (krg_action_any_pending(current)) { +#ifdef CONFIG_KRG_DEBUG + printk("%s:%d - action kerrighed! --> need replay!!\n", + __PRETTY_FUNCTION__, __LINE__); +#endif + msg = ERR_PTR(-ERESTARTSYS); + goto out_unlock; + } +#endif if (signal_pending(current)) { msg = ERR_PTR(-ERESTARTNOHAND); out_unlock: commit a15cda30e2116e4a0deb4f5508a2dc6efd9a9ae1 Author: Matthieu Fertré <mat...@ke...> Date: Tue Dec 22 09:40:31 2009 +0100 IPC Sem: semtimedop syscall is automatically restarted after being interrupted by a Kerrighed action. diff --git a/ipc/sem.c b/ipc/sem.c index ee816ba..97c2c54 100644 --- a/ipc/sem.c +++ b/ipc/sem.c @@ -89,6 +89,9 @@ #ifdef CONFIG_KRG_IPC #include <linux/random.h> #include <kerrighed/pid.h> +#ifdef CONFIG_KRG_EPM +#include <kerrighed/action.h> +#endif #include "krgsem.h" #endif @@ -1488,6 +1491,18 @@ SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsops, goto out_free; } +#if defined(CONFIG_KRG_IPC) && defined(CONFIG_KRG_EPM) + if (krg_action_any_pending(current)) { +#ifdef CONFIG_KRG_DEBUG + printk("%s:%d - action kerrighed! --> need replay!!\n", + __PRETTY_FUNCTION__, __LINE__); +#endif + list_del(&queue.list); + error = -ERESTARTSYS; + goto out_unlock_free; + } +#endif + /* * If queue.status != -EINTR we are woken up by another process */ commit 1474819c8521d263dedfdeacc86dfeb9220c3665 Author: Matthieu Fertré <mat...@ke...> Date: Tue Dec 22 11:59:28 2009 +0100 [JANITOR] IPC Msg queue: check return codes of kmalloc, rpc_pack and rpc_unpack diff --git a/ipc/msg_handler.c b/ipc/msg_handler.c index d2daeb3..904af3b 100644 --- a/ipc/msg_handler.c +++ b/ipc/msg_handler.c @@ -203,9 +203,10 @@ struct msgsnd_msg { kerrighed_node_t requester; int msqid; - long mtype; int msgflg; + long mtype; pid_t tgid; + size_t msgsz; }; long krg_ipc_msgsnd(int msqid, long mtype, void __user *mtext, @@ -221,18 +222,6 @@ long krg_ipc_msgsnd(int msqid, long mtype, void __user *mtext, int index; struct msgsnd_msg msg; - msg.requester = kerrighed_node_id; - msg.msqid = msqid; - msg.mtype = mtype; - msg.msgflg = msgflg; - msg.tgid = tgid; - - buffer = kmalloc(msgsz, GFP_KERNEL); - r = copy_from_user(buffer, mtext, msgsz); - if (r) - goto exit; - - /* TODO: manage ipc namespace */ index = ipcid_to_idx(msqid); master_set = krgipc_ops_master_set(msg_ids(ns).krgops); @@ -253,12 +242,33 @@ long krg_ipc_msgsnd(int msqid, long mtype, void __user *mtext, goto exit; } + msg.requester = kerrighed_node_id; + msg.msqid = msqid; + msg.mtype = mtype; + msg.msgflg = msgflg; + msg.tgid = tgid; + msg.msgsz = msgsz; + + buffer = kmalloc(msgsz, GFP_KERNEL); + if (!buffer) { + r = -ENOMEM; + goto exit; + } + + r = copy_from_user(buffer, mtext, msgsz); + if (r) + goto exit_free_buffer; + desc = rpc_begin(IPC_MSG_SEND, *master_node); _kddm_put_object(master_set, index); - rpc_pack_type(desc, msg); - rpc_pack_type(desc, msgsz); - rpc_pack(desc, 0, buffer, msgsz); + r = rpc_pack_type(desc, msg); + if (r) + goto exit_rpc; + + r = rpc_pack(desc, 0, buffer, msgsz); + if (r) + goto exit_rpc; err = rpc_unpack(desc, RPC_FLAGS_INTR, &r, sizeof(r)); if (err == RPC_EINTR) { @@ -267,16 +277,16 @@ long krg_ipc_msgsnd(int msqid, long mtype, void __user *mtext, r = -EINTR; } +exit_rpc: rpc_end(desc, 0); - -exit: +exit_free_buffer: kfree(buffer); +exit: return r; } static void handle_do_msg_send(struct rpc_desc *desc, void *_msg, size_t size) { - size_t msgsz; void *mtext; long r; sigset_t sigset, oldsigset; @@ -286,25 +296,30 @@ static void handle_do_msg_send(struct rpc_desc *desc, void *_msg, size_t size) ns = find_get_krg_ipcns(); BUG_ON(!ns); - rpc_unpack_type(desc, msgsz); - - mtext = kmalloc(msgsz, GFP_KERNEL); + mtext = kmalloc(msg->msgsz, GFP_KERNEL); + if (!mtext) { + r = -ENOMEM; + goto exit_put_ns; + } - rpc_unpack(desc, 0, mtext, msgsz); + r = rpc_unpack(desc, 0, mtext, msg->msgsz); + if (r) + goto exit_free_text; sigfillset(&sigset); sigprocmask(SIG_UNBLOCK, &sigset, &oldsigset); - r = __do_msgsnd(msg->msqid, msg->mtype, mtext, msgsz, msg->msgflg, + r = __do_msgsnd(msg->msqid, msg->mtype, mtext, msg->msgsz, msg->msgflg, ns, msg->tgid); sigprocmask(SIG_SETMASK, &oldsigset, NULL); flush_signals(current); - rpc_pack_type(desc, r); + r = rpc_pack_type(desc, r); +exit_free_text: kfree(mtext); - +exit_put_ns: put_ipc_ns(ns); } @@ -312,9 +327,10 @@ struct msgrcv_msg { kerrighed_node_t requester; int msqid; - long msgtyp; int msgflg; + long msgtyp; pid_t tgid; + size_t msgsz; }; long krg_ipc_msgrcv(int msqid, long *pmtype, void __user *mtext, @@ -330,11 +346,6 @@ long krg_ipc_msgrcv(int msqid, long *pmtype, void __user *mtext, int retval; int index; struct msgrcv_msg msg; - msg.requester = kerrighed_node_id; - msg.msqid = msqid; - msg.msgtyp = msgtyp; - msg.msgflg = msgflg; - msg.tgid = tgid; /* TODO: manage ipc namespace */ index = ipcid_to_idx(msqid); @@ -356,20 +367,40 @@ long krg_ipc_msgrcv(int msqid, long *pmtype, void __user *mtext, return r; } + msg.requester = kerrighed_node_id; + msg.msqid = msqid; + msg.msgtyp = msgtyp; + msg.msgflg = msgflg; + msg.tgid = tgid; + msg.msgsz = msgsz; + desc = rpc_begin(IPC_MSG_RCV, *master_node); _kddm_put_object(master_set, index); - rpc_pack_type(desc, msg); - rpc_pack_type(desc, msgsz); + r = rpc_pack_type(desc, msg); + if (r) + goto exit; err = rpc_unpack(desc, RPC_FLAGS_INTR, &r, sizeof(r)); if (!err) { if (r > 0) { /* get the real msg type */ - rpc_unpack(desc, 0, pmtype, sizeof(long)); + err = rpc_unpack(desc, 0, pmtype, sizeof(long)); + if (err) + goto err_rpc; buffer = kmalloc(r, GFP_KERNEL); - rpc_unpack(desc, 0, buffer, r); + if (!buffer) { + r = -ENOMEM; + goto exit; + } + + err = rpc_unpack(desc, 0, buffer, r); + if (err) { + kfree(buffer); + goto err_rpc; + } + retval = copy_to_user(mtext, buffer, r); kfree(buffer); if (retval) @@ -381,18 +412,23 @@ long krg_ipc_msgrcv(int msqid, long *pmtype, void __user *mtext, rpc_signal(desc, next_signal(¤t->pending, ¤t->blocked)); r = -EINTR; - } + } else + r = -EPIPE; +exit: rpc_end(desc, 0); return r; + +err_rpc: + r = -EPIPE; + goto exit; } static void handle_do_msg_rcv(struct rpc_desc *desc, void *_msg, size_t size) { - size_t msgsz; void *mtext; - long r; - long pmtype; + long msgsz, pmtype; + int r; struct msgrcv_msg *msg = _msg; sigset_t sigset, oldsigset; struct ipc_namespace *ns; @@ -400,27 +436,34 @@ static void handle_do_msg_rcv(struct rpc_desc *desc, void *_msg, size_t size) ns = find_get_krg_ipcns(); BUG_ON(!ns); - rpc_unpack_type(desc, msgsz); - - mtext = kmalloc(msgsz, GFP_KERNEL); + mtext = kmalloc(msg->msgsz, GFP_KERNEL); + if (!mtext) + goto exit_put_ns; sigfillset(&sigset); sigprocmask(SIG_UNBLOCK, &sigset, &oldsigset); - r = __do_msgrcv(msg->msqid, &pmtype, mtext, msgsz, - msg->msgtyp, msg->msgflg, ns, msg->tgid); + msgsz = __do_msgrcv(msg->msqid, &pmtype, mtext, msg->msgsz, + msg->msgtyp, msg->msgflg, ns, msg->tgid); sigprocmask(SIG_SETMASK, &oldsigset, NULL); flush_signals(current); - rpc_pack_type(desc, r); - if (r > 0) { - rpc_pack_type(desc, pmtype); /* send the real type of msg */ - rpc_pack(desc, 0, mtext, r); - } + r = rpc_pack_type(desc, msgsz); + if (r || msgsz <= 0) + goto exit_free_text; - kfree(mtext); + r = rpc_pack_type(desc, pmtype); /* send the real type of msg */ + if (r) + goto exit_free_text; + + r = rpc_pack(desc, 0, mtext, msgsz); + if (r) + goto exit_free_text; +exit_free_text: + kfree(mtext); +exit_put_ns: put_ipc_ns(ns); } commit 09a34f7bd89cd0bb13ccc8594c0d3fc787a0401f Author: Louis Rilling <lou...@ke...> Date: Thu Dec 10 15:12:41 2009 +0100 [BUGFIX] epm: Fix huge stack frame of sighand_struct_import_objec() And let gcc 4.4 happily compile Kerrighed. Signed-off-by: Louis Rilling <lou...@ke...> diff --git a/kerrighed/epm/sighand.c b/kerrighed/epm/sighand.c index c2bb275..9c31a9f 100644 --- a/kerrighed/epm/sighand.c +++ b/kerrighed/epm/sighand.c @@ -118,10 +118,16 @@ static int sighand_struct_import_object(struct rpc_desc *desc, { struct sighand_struct_kddm_object *obj = obj_entry->object; struct sighand_struct *dest; - struct sighand_struct tmp; + struct sighand_struct *tmp; int retval; - retval = rpc_unpack_type(desc, tmp); + tmp = kmem_cache_alloc(sighand_cachep, GFP_KERNEL); + if (!tmp) + return -ENOMEM; + + retval = rpc_unpack_type(desc, tmp->count); + if (likely(!retval)) + retval = rpc_unpack_type(desc, tmp->action); if (likely(!retval)) retval = rpc_unpack_type(desc, obj->count); @@ -130,11 +136,13 @@ static int sighand_struct_import_object(struct rpc_desc *desc, spin_lock_irq(&dest->siglock); /* This is safe since all changes are protected by grab, and * no thread can hold a grab during import */ - atomic_set(&dest->count, atomic_read(&tmp.count)); - memcpy(dest->action, tmp.action, sizeof(dest->action)); + atomic_set(&dest->count, atomic_read(&tmp->count)); + memcpy(dest->action, tmp->action, sizeof(dest->action)); spin_unlock_irq(&dest->siglock); } + kmem_cache_free(sighand_cachep, tmp); + return retval; } @@ -152,7 +160,9 @@ static int sighand_struct_export_object(struct rpc_desc *desc, int retval; src = obj->sighand; - retval = rpc_pack_type(desc, *src); + retval = rpc_pack_type(desc, src->count); + if (likely(!retval)) + retval = rpc_pack_type(desc, src->action); if (likely(!retval)) retval = rpc_pack_type(desc, obj->count); commit 149ed630a8943a7b00b4c68710fddb054cfacb2d Author: Renaud Lottiaux <Ren...@ke...> Date: Tue Dec 22 13:32:03 2009 +0100 [MINOR] Move page_table_tree.h to public include kerrighed dir. diff --git a/kerrighed/mm/page_table_tree.h b/include/kerrighed/page_table_tree.h similarity index 100% rename from kerrighed/mm/page_table_tree.h rename to include/kerrighed/page_table_tree.h diff --git a/kerrighed/mm/memory_int_linker.c b/kerrighed/mm/memory_int_linker.c index 269b1c0..4fe455c 100644 --- a/kerrighed/mm/memory_int_linker.c +++ b/kerrighed/mm/memory_int_linker.c @@ -16,13 +16,13 @@ #include <linux/rmap.h> #include <linux/acct.h> #include <kerrighed/pid.h> +#include <kerrighed/page_table_tree.h> #include <asm/tlb.h> #include <kddm/kddm.h> #include "memory_int_linker.h" #include "memory_io_linker.h" #include "mm_struct.h" -#include "page_table_tree.h" struct vm_operations_struct null_vm_ops = {}; diff --git a/kerrighed/mm/memory_io_linker.c b/kerrighed/mm/memory_io_linker.c index c5afc90..174d527 100644 --- a/kerrighed/mm/memory_io_linker.c +++ b/kerrighed/mm/memory_io_linker.c @@ -18,9 +18,10 @@ #include <net/krgrpc/rpc.h> #include <kddm/kddm.h> +#include <kerrighed/page_table_tree.h> + #include "memory_io_linker.h" #include "memory_int_linker.h" -#include "page_table_tree.h" /*****************************************************************************/ /* */ diff --git a/kerrighed/mm/mm.c b/kerrighed/mm/mm.c index 1ca6034..5ad069d 100644 --- a/kerrighed/mm/mm.c +++ b/kerrighed/mm/mm.c @@ -17,8 +17,8 @@ #include <kerrighed/krgsyms.h> #include <kerrighed/mm.h> #include <kerrighed/hotplug.h> +#include <kerrighed/page_table_tree.h> #include <kddm/kddm.h> -#include "page_table_tree.h" #include "mm_struct.h" #include "memory_int_linker.h" #include "memory_io_linker.h" diff --git a/kerrighed/mm/page_table_tree.c b/kerrighed/mm/page_table_tree.c index a4443cb..0e04c92 100644 --- a/kerrighed/mm/page_table_tree.c +++ b/kerrighed/mm/page_table_tree.c @@ -13,8 +13,8 @@ #include <net/krgrpc/rpc.h> #include <kddm/kddm.h> +#include <kerrighed/page_table_tree.h> -#include "page_table_tree.h" #include "memory_int_linker.h" #include "mm_struct.h" #include "vma_struct.h" commit 9c7155504e2c4d60e5ad9f24509a388206bb22a6 Author: Renaud Lottiaux <Ren...@ke...> Date: Tue Dec 22 13:29:56 2009 +0100 [KDDM] Use the new flags parameter to inform IO linkers about flush operations. diff --git a/include/kddm/object_server.h b/include/kddm/object_server.h index c3d6827..fb3432b 100644 --- a/include/kddm/object_server.h +++ b/include/kddm/object_server.h @@ -32,7 +32,7 @@ #define KDDM_DONT_KILL 0x00000020 #define KDDM_NEED_OBJ_RM_ACK2 0x00000040 #define KDDM_NO_FREEZE 0x00000080 -#define KDDM_CREATE_ON_FT 0x00000100 +#define KDDM_IO_FLUSH 0x00000100 #define KDDM_SYNC_OBJECT 0x00000200 #define KDDM_NO_DATA 0x00000400 #define KDDM_TRY_GRAB 0x00000800 diff --git a/kddm/kddm_flush_object.c b/kddm/kddm_flush_object.c index 5d750cc..8d41311 100644 --- a/kddm/kddm_flush_object.c +++ b/kddm/kddm_flush_object.c @@ -99,7 +99,7 @@ send_copy: } send_copy_on_write(set, obj_entry, objid, dest, - KDDM_REMOVE_ON_ACK); + KDDM_REMOVE_ON_ACK | KDDM_IO_FLUSH); res = 0; goto exit_no_unlock; diff --git a/kddm/object_server.c b/kddm/object_server.c index ac2e27e..5a5b779 100644 --- a/kddm/object_server.c +++ b/kddm/object_server.c @@ -112,7 +112,8 @@ static inline int __handle_invalidation_ack (kerrighed_node_t sender, BUG_ON (dest == 1); obj_entry = send_copy_on_write_and_inv ( - set, obj_entry, msg->objid, dest, 0); + set, obj_entry, msg->objid, dest, + KDDM_IO_FLUSH); /* Wake up the set_flush function */ commit cf749454a37ec18fdaef3e87c49868b745f8d7d2 Author: Renaud Lottiaux <Ren...@ke...> Date: Tue Dec 22 13:28:55 2009 +0100 [KDDM] Add flags parameter to import/export IO linker functions. This can be usefull to inform IO linkers that an export is coming from a flush. diff --git a/include/kddm/io_linker.h b/include/kddm/io_linker.h index 8ac5665..c56425c 100644 --- a/include/kddm/io_linker.h +++ b/include/kddm/io_linker.h @@ -110,9 +110,9 @@ struct iolinker_struct { int (*alloc_object) (struct kddm_obj * obj_entry, struct kddm_set * set, objid_t objid); int (*import_object) (struct rpc_desc *desc, struct kddm_set *set, - struct kddm_obj *obj_entry, objid_t objid); + struct kddm_obj *obj_entry, objid_t objid, int flags); int (*export_object) (struct rpc_desc *desc, struct kddm_set *set, - struct kddm_obj *obj_entry, objid_t objid); + struct kddm_obj *obj_entry, objid_t objid, int flags); kerrighed_node_t (*default_owner) (struct kddm_set * set, objid_t objid, const krgnodemask_t * nodes, int nr_nodes); char linker_name[16]; @@ -271,9 +271,8 @@ int kddm_io_change_state (struct kddm_obj * obj_entry, * @param buffer Buffer containing data to import. */ int kddm_io_import_object (struct rpc_desc *desc, struct kddm_set *set, - struct kddm_obj *obj_entry, objid_t objid); - - + struct kddm_obj *obj_entry, objid_t objid, + int flags); /** Request an IO linker to export data from an object. * @author Renaud Lottiaux @@ -283,7 +282,8 @@ int kddm_io_import_object (struct rpc_desc *desc, struct kddm_set *set, * @param buffer Buffer to export data to. */ int kddm_io_export_object (struct rpc_desc *desc, struct kddm_set *set, - struct kddm_obj *obj_entry, objid_t objid); + struct kddm_obj *obj_entry, objid_t objid, + int flags); kerrighed_node_t kddm_io_default_owner (struct kddm_set * set, objid_t objid); /** Request an IO linker to allocate an object. diff --git a/ipc/msg_io_linker.c b/ipc/msg_io_linker.c index e9ba4f2..c4dd044 100644 --- a/ipc/msg_io_linker.c +++ b/ipc/msg_io_linker.c @@ -254,7 +254,8 @@ int msq_remove_object(void *object, struct kddm_set *set, objid_t objid) int msq_export_object (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { msq_object_t *msq_object; int r; @@ -278,7 +279,8 @@ int msq_export_object (struct rpc_desc *desc, int msq_import_object (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { msq_object_t *msq_object, buffer; struct msg_queue *msq; diff --git a/ipc/semarray_io_linker.c b/ipc/semarray_io_linker.c index 0049c75..71914ba 100644 --- a/ipc/semarray_io_linker.c +++ b/ipc/semarray_io_linker.c @@ -392,7 +392,8 @@ static inline void __export_semqueues(struct rpc_desc *desc, int semarray_export_object (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { semarray_object_t *sem_object; struct sem_array *sma; @@ -577,7 +578,8 @@ static inline void __unimport_semqueues(struct sem_array *sma) int semarray_import_object (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { semarray_object_t *sem_object; int r = 0; diff --git a/ipc/semundolst_io_linker.c b/ipc/semundolst_io_linker.c index 96dccc7..c0513b7 100644 --- a/ipc/semundolst_io_linker.c +++ b/ipc/semundolst_io_linker.c @@ -135,7 +135,8 @@ int undolist_invalidate_object (struct kddm_obj * obj_entry, int undolist_export_object (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct semundo_list_object *undo_list; struct semundo_id *un; @@ -174,7 +175,8 @@ error: int undolist_import_object (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct semundo_list_object *undo_list; struct semundo_id *un, *prev = NULL; diff --git a/ipc/shm_memory_linker.c b/ipc/shm_memory_linker.c index 28a593b..37f824f 100644 --- a/ipc/shm_memory_linker.c +++ b/ipc/shm_memory_linker.c @@ -34,9 +34,11 @@ extern int memory_alloc_object (struct kddm_obj * objEntry, struct kddm_set * kddm, objid_t objid); extern int memory_import_object (struct rpc_desc *desc, struct kddm_set *set, - struct kddm_obj *objEntry, objid_t objid); + struct kddm_obj *objEntry, objid_t objid, + int flags); extern int memory_export_object (struct rpc_desc *desc, struct kddm_set *set, - struct kddm_obj *objEntry, objid_t objid); + struct kddm_obj *objEntry, objid_t objid, + int flags); extern void map_kddm_page (struct vm_area_struct *vma, unsigned long address, struct page *page, int write); diff --git a/ipc/shmid_io_linker.c b/ipc/shmid_io_linker.c index 9792e79..7033d97 100644 --- a/ipc/shmid_io_linker.c +++ b/ipc/shmid_io_linker.c @@ -233,7 +233,8 @@ int shmid_remove_object (void *object, int shmid_export_object (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { shmid_object_t *shp_object; @@ -255,7 +256,8 @@ int shmid_export_object (struct rpc_desc *desc, int shmid_import_object (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { shmid_object_t *shp_object, buffer; struct shmid_kernel *shp; diff --git a/kddm/io_linker.c b/kddm/io_linker.c index fdb78ad..3183674 100644 --- a/kddm/io_linker.c +++ b/kddm/io_linker.c @@ -363,7 +363,8 @@ int kddm_io_change_state (struct kddm_obj * obj_entry, int kddm_io_import_object (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct iolinker_struct *io = set->iolinker; int res; @@ -373,7 +374,7 @@ int kddm_io_import_object (struct rpc_desc *desc, might_sleep(); if (io && io->import_object) - res = io->import_object(desc, set, obj_entry, objid); + res = io->import_object(desc, set, obj_entry, objid, flags); else res = rpc_unpack(desc, 0, obj_entry->object, set->obj_size); @@ -392,13 +393,14 @@ int kddm_io_import_object (struct rpc_desc *desc, int kddm_io_export_object (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct iolinker_struct *io = set->iolinker; int res; if (io && io->export_object) - res = io->export_object(desc, set, obj_entry, objid); + res = io->export_object(desc, set, obj_entry, objid, flags); else res = rpc_pack(desc, 0, obj_entry->object, set->obj_size); diff --git a/kddm/object_server.c b/kddm/object_server.c index b9fee0d..ac2e27e 100644 --- a/kddm/object_server.c +++ b/kddm/object_server.c @@ -669,7 +669,8 @@ void handle_object_receive (struct rpc_desc* desc, res = kddm_io_alloc_object (obj_entry, set, msg->objid); BUG_ON(res != 0); - kddm_io_import_object (desc, set, obj_entry, msg->objid); + kddm_io_import_object (desc, set, obj_entry, msg->objid, + msg->flags); kddm_obj_path_lock(set, msg->objid); diff --git a/kddm/protocol_action.c b/kddm/protocol_action.c index 7f6febc..d5d96b9 100644 --- a/kddm/protocol_action.c +++ b/kddm/protocol_action.c @@ -114,7 +114,7 @@ static inline int send_msg_to_object_receiver(kerrighed_node_t dest, } if (!(flags & KDDM_NO_DATA)) { - err = kddm_io_export_object(desc, set, obj_entry, objid); + err = kddm_io_export_object(desc, set, obj_entry, objid, flags); if (err) goto err_cancel; } diff --git a/kerrighed/epm/children.c b/kerrighed/epm/children.c index dde682c..aa56b85 100644 --- a/kerrighed/epm/children.c +++ b/kerrighed/epm/children.c @@ -164,7 +164,8 @@ static int children_first_touch(struct kddm_obj *obj_entry, static int children_export_object(struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct children_kddm_object *obj = obj_entry->object; struct remote_child *child; @@ -195,7 +196,8 @@ out: static int children_import_object(struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct children_kddm_object *obj = obj_entry->object; struct remote_child *child, *next; diff --git a/kerrighed/epm/pid.c b/kerrighed/epm/pid.c index 08fb14f..9e293d5 100644 --- a/kerrighed/epm/pid.c +++ b/kerrighed/epm/pid.c @@ -98,7 +98,8 @@ static int pid_first_touch(struct kddm_obj *obj_entry, static int pid_import_object(struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct pid_kddm_object *obj = obj_entry->object; @@ -111,7 +112,8 @@ static int pid_import_object(struct rpc_desc *desc, static int pid_export_object(struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct pid_kddm_object *obj = obj_entry->object; diff --git a/kerrighed/epm/pidmap.c b/kerrighed/epm/pidmap.c index 739675f..6dc5d2e 100644 --- a/kerrighed/epm/pidmap.c +++ b/kerrighed/epm/pidmap.c @@ -60,7 +60,8 @@ out: } static int pidmap_map_import_object(struct rpc_desc *desc, struct kddm_set *set, - struct kddm_obj *obj_entry, objid_t objid) + struct kddm_obj *obj_entry, objid_t objid, + int flags) { struct pidmap_map *map = obj_entry->object; @@ -68,7 +69,8 @@ static int pidmap_map_import_object(struct rpc_desc *desc, struct kddm_set *set, } static int pidmap_map_export_object(struct rpc_desc *desc, struct kddm_set *set, - struct kddm_obj *obj_entry, objid_t objid) + struct kddm_obj *obj_entry, objid_t objid, + int flags) { struct pidmap_map *map = obj_entry->object; diff --git a/kerrighed/epm/sighand.c b/kerrighed/epm/sighand.c index de42988..c2bb275 100644 --- a/kerrighed/epm/sighand.c +++ b/kerrighed/epm/sighand.c @@ -113,7 +113,8 @@ static int sighand_struct_first_touch(struct kddm_obj *obj_entry, static int sighand_struct_import_object(struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct sighand_struct_kddm_object *obj = obj_entry->object; struct sighand_struct *dest; @@ -143,7 +144,8 @@ static int sighand_struct_import_object(struct rpc_desc *desc, static int sighand_struct_export_object(struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct sighand_struct_kddm_object *obj = obj_entry->object; struct sighand_struct *src; diff --git a/kerrighed/epm/signal.c b/kerrighed/epm/signal.c index 8e2d2e9..bd4c5ea 100644 --- a/kerrighed/epm/signal.c +++ b/kerrighed/epm/signal.c @@ -156,7 +156,8 @@ static int signal_struct_first_touch(struct kddm_obj *obj_entry, static int signal_struct_import_object(struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct signal_struct_kddm_object *obj = obj_entry->object; struct signal_struct *dest = obj->signal; @@ -257,7 +258,8 @@ static int signal_struct_import_object(struct rpc_desc *desc, static int signal_struct_export_object(struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int _flags) { struct signal_struct_kddm_object *obj = obj_entry->object; struct task_struct *tsk; diff --git a/kerrighed/fs/file_struct_io_linker.c b/kerrighed/fs/file_struct_io_linker.c index cadf3d1..a5f2b17 100644 --- a/kerrighed/fs/file_struct_io_linker.c +++ b/kerrighed/fs/file_struct_io_linker.c @@ -73,7 +73,8 @@ int file_remove_object (void *object, int file_export_object (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct dvfs_file_struct *dvfs_file; @@ -92,7 +93,8 @@ int file_export_object (struct rpc_desc *desc, int file_import_object (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct dvfs_file_struct *dvfs_file, buffer; diff --git a/kerrighed/mm/memory_io_linker.c b/kerrighed/mm/memory_io_linker.c index 9bc58b1..c5afc90 100644 --- a/kerrighed/mm/memory_io_linker.c +++ b/kerrighed/mm/memory_io_linker.c @@ -54,7 +54,8 @@ int memory_alloc_object (struct kddm_obj * obj_entry, int memory_import_object (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct page *page = obj_entry->object; char *data; @@ -76,7 +77,8 @@ int memory_import_object (struct rpc_desc *desc, int memory_export_object (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct page *page = (struct page *)obj_entry->object; char *data; diff --git a/kerrighed/mm/mm_struct_io_linker.c b/kerrighed/mm/mm_struct_io_linker.c index 65ec662..4b4dd97 100644 --- a/kerrighed/mm/mm_struct_io_linker.c +++ b/kerrighed/mm/mm_struct_io_linker.c @@ -80,7 +80,8 @@ int mm_remove_object (void *object, int mm_export_object (struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct mm_struct *mm; krgsyms_val_t unmap_id, get_unmap_id; @@ -115,7 +116,8 @@ int mm_export_object (struct rpc_desc *desc, int mm_import_object (struct rpc_desc *desc, struct kddm_set *_set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct mm_struct *mm; krgsyms_val_t unmap_id, get_unmap_id; diff --git a/kerrighed/proc/task.c b/kerrighed/proc/task.c index 48c2d36..cacf0f8 100644 --- a/kerrighed/proc/task.c +++ b/kerrighed/proc/task.c @@ -107,7 +107,8 @@ static int task_first_touch(struct kddm_obj *obj_entry, static int task_import_object(struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct task_kddm_object *dest = obj_entry->object; struct task_kddm_object src; @@ -196,7 +197,8 @@ static void task_update_object(struct task_kddm_object *obj) static int task_export_object(struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct task_kddm_object *src = obj_entry->object; struct task_struct *tsk; diff --git a/kerrighed/scheduler/global_lock.c b/kerrighed/scheduler/global_lock.c index 12e148a..1883ec0 100644 --- a/kerrighed/scheduler/global_lock.c +++ b/kerrighed/scheduler/global_lock.c @@ -27,7 +27,8 @@ static int global_lock_alloc_object(struct kddm_obj *obj_entry, static int global_lock_export_object(struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { return 0; } @@ -36,7 +37,8 @@ static int global_lock_export_object(struct rpc_desc *desc, static int global_lock_import_object(struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { return 0; } diff --git a/kerrighed/scheduler/string_list.c b/kerrighed/scheduler/string_list.c index 0848d74..1db7157 100644 --- a/kerrighed/scheduler/string_list.c +++ b/kerrighed/scheduler/string_list.c @@ -72,7 +72,8 @@ static void string_list_make_empty(struct string_list_object *object) static int string_list_import_object(struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct string_list_object *obj = obj_entry->object; struct string_list_element *elt; @@ -110,7 +111,8 @@ out: static int string_list_export_object(struct rpc_desc *desc, struct kddm_set *set, struct kddm_obj *obj_entry, - objid_t objid) + objid_t objid, + int flags) { struct string_list_object *obj = obj_entry->object; struct string_list_element *elt; commit ba883349dd1a5baafa210eb902665363f1ba9f41 Author: Renaud Lottiaux <Ren...@ke...> Date: Tue Dec 22 13:24:57 2009 +0100 [BUGFIX] Fix issues with *at functions on FAF files. This patch built a full pathname from a FAF directory file and a relative pathname in the kernel do_path_lookup. The calling *at function will then work on the absolute path generated. diff --git a/fs/namei.c b/fs/namei.c index fdee2a1..60835a8 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -34,6 +34,9 @@ #include <linux/device_cgroup.h> #include <linux/fs_struct.h> #include <asm/uaccess.h> +#ifdef CONFIG_KRG_FAF +#include <kerrighed/faf.h> +#endif #define ACC_MODE(x) ("\000\004\002\006"[(x)&O_ACCMODE]) @@ -1050,6 +1053,20 @@ static int do_path_lookup(int dfd, const char *name, if (!file) goto out_fail; +#ifdef CONFIG_KRG_FAF + if (file->f_flags & O_FAF_CLT) { + faf_client_data_t *data = file->private_data; + + retval = -ENOTDIR; + if (!S_ISDIR(data->i_mode)) + goto fput_fail; + + retval = krg_faf_do_path_lookup(file, name, flags, nd); + + fput_light(file, fput_needed); + return retval; + } +#endif dentry = file->f_path.dentry; retval = -ENOTDIR; commit bd8bd26b267146df7e49e3338f9679fdcada585c Author: Renaud Lottiaux <Ren...@ke...> Date: Tue Dec 22 13:22:24 2009 +0100 [MINOR] Expose faf_client_data_t. diff --git a/include/kerrighed/faf.h b/include/kerrighed/faf.h index e1ff500..88d40c5 100644 --- a/include/kerrighed/faf.h +++ b/include/kerrighed/faf.h @@ -10,6 +10,24 @@ struct file; struct kstat; struct statfs; +/*--------------------------------------------------------------------------* + * * + * TYPES * + * * + *--------------------------------------------------------------------------*/ + +typedef struct faf_client_data { + kerrighed_node_t server_id; + int server_fd; + unsigned long f_flags; + fmode_t f_mode; + loff_t f_pos; + wait_queue_head_t poll_wq; + unsigned int poll_revents; + umode_t i_mode; + unsigned int is_named_pipe:1; +} faf_client_data_t; + off_t krg_faf_lseek(struct file *file, off_t offset, unsigned int origin); long krg_faf_llseek(struct file *file, unsigned long offset_high, diff --git a/kerrighed/fs/faf/faf_internal.h b/kerrighed/fs/faf/faf_internal.h index b433e42..efbf980 100644 --- a/kerrighed/fs/faf/faf_internal.h +++ b/kerrighed/fs/faf/faf_internal.h @@ -23,24 +23,6 @@ struct dvfs_file_struct; /*--------------------------------------------------------------------------* * * - * TYPES * - * * - *--------------------------------------------------------------------------*/ - -typedef struct faf_client_data { - kerrighed_node_t server_id; - int server_fd; - unsigned long f_flags; - fmode_t f_mode; - loff_t f_pos; - wait_queue_head_t poll_wq; - unsigned int poll_revents; - umode_t i_mode; - unsigned int is_named_pipe:1; -} faf_client_data_t; - -/*--------------------------------------------------------------------------* - * * * EXTERN FUNCTIONS * * * *--------------------------------------------------------------------------*/ commit a848c99a02723cd8cb8a03830f47713640cf7976 Author: Renaud Lottiaux <Ren...@ke...> Date: Tue Dec 22 13:21:49 2009 +0100 [FAF] Introduce krg_faf_do_path_lookup function. This function is used to build a full pathname from a directory file and a relative pathname for a FAF file. This function will be used to support linkat, and all *at functions on FAF files. diff --git a/include/kerrighed/faf.h b/include/kerrighed/faf.h index fcdd00f..e1ff500 100644 --- a/include/kerrighed/faf.h +++ b/include/kerrighed/faf.h @@ -4,6 +4,7 @@ #define __FAF_H__ #include <linux/types.h> +#include <linux/namei.h> struct file; struct kstat; @@ -28,6 +29,8 @@ long krg_faf_fstatfs(struct file *file, struct statfs *statfs); long krg_faf_fsync(struct file *file); long krg_faf_flock(struct file *file, unsigned int cmd); char *krg_faf_d_path(struct file *file, char *buffer, int size); +int krg_faf_do_path_lookup(struct file *file, const char *name, + unsigned int flags, struct nameidata *nd); void krg_faf_srv_close(struct file *file); struct sockaddr; diff --git a/kerrighed/fs/faf/faf_hooks.c b/kerrighed/fs/faf/faf_hooks.c index 0169a10..430ccea 100644 --- a/kerrighed/fs/faf/faf_hooks.c +++ b/kerrighed/fs/faf/faf_hooks.c @@ -6,6 +6,7 @@ */ #include <linux/fs.h> #include <linux/file.h> +#include <linux/namei.h> #include <linux/socket.h> #include <linux/sched.h> #include <linux/wait.h> @@ -596,6 +597,39 @@ err_cancel: goto out_end; } +int krg_faf_do_path_lookup(struct file *file, + const char *name, + unsigned int flags, + struct nameidata *nd) +{ + char *tmp = (char *) __get_free_page (GFP_KERNEL); + char *path; + int len, err = 0; + + path = faf_d_path(file, tmp, PAGE_SIZE); + + if (IS_ERR(path)) { + err = PTR_ERR(path); + goto exit; + } + + len = strlen (path); + if ((len >= 10) && (strcmp (path + len - 10, " (deleted)") == 0)) + len -= 10; + + if (likely(path != tmp)) { + strncpy(tmp, path, PAGE_SIZE); + path = tmp; + } + + strncpy(&path[len], name, PAGE_SIZE - len); + + err = path_lookup(path, flags, nd); +exit: + free_page ((unsigned long) tmp); + return err; +} + long krg_faf_bind (struct file * file, struct sockaddr __user *umyaddr, int addrlen) commit f3fa022fae876a86e2075229de1e1e29b9ce1ea1 Author: Renaud Lottiaux <Ren...@ke...> Date: Tue Dec 22 13:17:14 2009 +0100 [MINOR] Add paranoia check in free_pages_check. diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 0733c3a..548081c 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -251,10 +251,10 @@ static void bad_page(struct page *page) current->comm, page_to_pfn(page)); #ifdef CONFIG_KRG_MM printk(KERN_ALERT - "page:%p flags:%p count:%d mapcount:%d mapping:%p index:%lx kddm_count:%d\n", + "page:%p flags:%p count:%d mapcount:%d mapping:%p index:%lx kddm_count:%d obj_entry:%p\n", page, (void *)page->flags, page_count(page), page_mapcount(page), page->mapping, page->index, - page_kddm_count(page)); + page_kddm_count(page), page->obj_entry); #else printk(KERN_ALERT "page:%p flags:%p count:%d mapcount:%d mapping:%p index:%lx\n", @@ -505,6 +505,7 @@ static inline int free_pages_check(struct page *page) (page->mapping != NULL) | (page_count(page) != 0) | #ifdef CONFIG_KRG_MM + (page->obj_entry != NULL) | (page_kddm_count(page) != 0) | #endif (page->flags & PAGE_FLAGS_CHECK_AT_FREE))) { commit 02bbde5b03504121dd9d0af733d8e55a30e0ada9 Author: Renaud Lottiaux <Ren...@ke...> Date: Tue Dec 22 13:17:04 2009 +0100 [MINOR] Move the non NULL mm test in grab_swap_token. diff --git a/mm/memory.c b/mm/memory.c index 8f09d26..9dad218 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -2572,9 +2572,6 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, delayacct_set_flag(DELAYACCT_PF_SWAPIN); page = lookup_swap_cache(entry); if (!page) { -#ifdef CONFIG_KRG_MM - if (current->mm) -#endif grab_swap_token(); /* Contend for token _before_ read-in */ page = swapin_readahead(entry, GFP_HIGHUSER_MOVABLE, vma, address); diff --git a/mm/thrash.c b/mm/thrash.c index c4c5205..3f80c7d 100644 --- a/mm/thrash.c +++ b/mm/thrash.c @@ -30,6 +30,11 @@ void grab_swap_token(void) { int current_interval; +#ifdef CONFIG_KRG_MM + if (!current->mm) + return; +#endif + global_faults++; current_interval = global_faults - current->mm->faultstamp; commit c118ec7202dd53b1fee58eb8fca3535ef04f5cf2 Author: Renaud Lottiaux <Ren...@ke...> Date: Tue Dec 22 13:16:46 2009 +0100 [BUGFIX] Fix wrong initialization in memory_remove_page. diff --git a/kerrighed/mm/memory_io_linker.c b/kerrighed/mm/memory_io_linker.c index c4563d6..9bc58b1 100644 --- a/kerrighed/mm/memory_io_linker.c +++ b/kerrighed/mm/memory_io_linker.c @@ -211,9 +211,11 @@ int memory_remove_page (void *object, objid_t objid) { struct page *page = (struct page *) object; - struct kddm_obj *obj_entry = page->obj_entry; + struct kddm_obj *obj_entry; if (page) { + obj_entry = page->obj_entry; + /* Invalidate page table entry */ kddm_pt_invalidate (set, objid, obj_entry, page); commit f5a04976cc51b2835361b779f5e458b059307859 Author: Renaud Lottiaux <Ren...@ke...> Date: Tue Dec 22 13:15:49 2009 +0100 [MINOR] Fix compilation issue. diff --git a/lib/cluster_barrier.c b/lib/cluster_barrier.c index a74f42b..fa15c8a 100644 --- a/lib/cluster_barrier.c +++ b/lib/cluster_barrier.c @@ -8,10 +8,12 @@ #include <linux/cluster_barrier.h> #include <linux/hashtable.h> +#include <linux/unique_id.h> #include <net/krgrpc/rpc.h> #include <kerrighed/types.h> #include <kerrighed/hotplug.h> +#include <kerrighed/krginit.h> #define TABLE_SIZE 128 commit 408200feebbbc22d70cf5ed45a3f8a87551bdd92 Author: Renaud Lottiaux <Ren...@ke...> Date: Tue Dec 22 13:15:33 2009 +0100 [MINOR] Fix compilation issue. Compile the hotplug directory only if the CONFIG_KRG_HOTPLUG option is set. diff --git a/kerrighed/Makefile b/kerrighed/Makefile index e7ae071..49836e3 100644 --- a/kerrighed/Makefile +++ b/kerrighed/Makefile @@ -1,5 +1,5 @@ -obj-y := hotplug/ +obj-$(CONFIG_KRG_HOTPLUG) += hotplug/ obj-$(CONFIG_KRG_CAP) += capability/ obj-$(CONFIG_KRG_PROCFS) += procfs/ obj-$(CONFIG_KRG_PROC) += proc/ commit fd93f5e6b8527fa2e26673808fe725a89f307aaf Author: Renaud Lottiaux <Ren...@ke...> Date: Tue Dec 22 13:13:33 2009 +0100 [MINOR] Fix missing #ifdef. diff --git a/mm/vmscan.c b/mm/vmscan.c index e431879..6b26696 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -599,6 +599,7 @@ void putback_lru_page(struct page *page) } #endif /* CONFIG_UNEVICTABLE_LRU */ +#ifdef CONFIG_KRG_MM static int check_injection_flow(void) { long i = 0, limit = RPC_MAX_PAGES; @@ -618,6 +619,7 @@ static int check_injection_flow(void) return 0; } +#endif /* * shrink_page_list() returns the number of reclaimed pages commit 219b025717142a0ea244798bb5fbf104e1af79de Author: Louis Rilling <lou...@ke...> Date: Mon Dec 14 16:56:59 2009 +0100 [BUILD] Fix compilation of ptrace.c without KRG_EPM Signed-off-by: Louis Rilling <lou...@ke...> diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 198432f..e31b3a9 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c @@ -426,7 +426,9 @@ int ptrace_detach(struct task_struct *child, unsigned int data) if (child->ptrace) { child->exit_code = data; dead = __ptrace_detach(current, child); +#ifdef CONFIG_KRG_EPM krg_set_child_ptraced(parent_children_obj, child, 0); +#endif if (!child->exit_state) wake_up_process(child); } commit 07fde119b640c73a84fab3671006ae15e91dcb76 Author: Jean Parpaillon <jea...@ke...> Date: Wed Dec 16 12:11:33 2009 +0100 [misc] Replace Linux logo with Kerrighed one diff --git a/drivers/video/logo/logo_linux_clut224.ppm b/drivers/video/logo/logo_linux_clut224.ppm index 3c14e43..3b4ae11 100644 --- a/drivers/video/logo/logo_linux_clut224.ppm +++ b/drivers/video/logo/logo_linux_clut224.ppm @@ -1,1604 +1,1123 @@ P3 -# Standard 224-color Linux logo 80 80 255 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 6 6 6 6 6 6 10 10 10 10 10 10 - 10 10 10 6 6 6 6 6 6 6 6 6 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0... [truncated message content] |