> The concept is ok to me. but AFAIK some caller are now using ARRAY_SIZE(tsk->comm). > or sizeof(tsk->comm). Probably callers need to be changed too. one more correction. > void set_task_comm(struct task_struct *tsk, char *buf) > { > + char tmp_comm[TASK_COMM_LEN]; > + > task_lock(tsk); > > + memcpy(tmp_comm, tsk->comm_buf, TASK_COMM_LEN); > + tsk->comm = tmp; > /* > - * Threads may access current->comm without holding > - * the task lock, so write the string carefully. > - * Readers without a lock may see incomplete new > - * names but are safe from non-terminating string reads. > + * Make sure no one is still looking at tsk->comm_buf > */ > - memset(tsk->comm, 0, TASK_COMM_LEN); > - wmb(); > - strlcpy(tsk->comm, buf, sizeof(tsk->comm)); > + synchronize_rcu(); The doc says, /** * synchronize_rcu - wait until a grace period has elapsed. * And here is under spinlock. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>