Use __set_current_state() instead of current->state = (take 3)

Use __set_current_state() instead of current->state = (take 3)

Post by Inaky Perez-Gonzale » Fri, 07 Mar 2003 01:30:17



Hi all

In fs/*.c, many functions manually set the task state directly
accessing current->state, or with a macro, kind of
inconsistently. This patch changes all of them to use
[__]set_current_state().

Changelog:

 Take 3:

  - Port to 2.5.64

  - Port to 2.5.57

  - Use safe set_current_state() instead of __set... in
    exec.c:de_thread()

 Take 2:

  - Added feedback from Robert Love regarding usage of
    __set_current_thread() vs. set_current_thread() to avoid race
    conditions related to memory flush.

  - Use cond_resched() in namei.c:do_follow_link().

 Take 1:

  - Ported forward to 2.5.52

diff -u linux/fs/exec.c:1.1.1.15 linux/fs/exec.c:1.1.1.1.6.6
--- linux/fs/exec.c:1.1.1.15    Mon Feb 24 21:04:49 2003

                count = 1;
        while (atomic_read(&oldsig->count) > count) {
                oldsig->group_exit_task = current;
-               current->state = TASK_UNINTERRUPTIBLE;
+               set_current_state(TASK_UNINTERRUPTIBLE);
                spin_unlock_irq(lock);
                schedule();
                spin_lock_irq(lock);
diff -u linux/fs/inode.c:1.1.1.10 linux/fs/inode.c:1.1.1.1.6.6
--- linux/fs/inode.c:1.1.1.10   Wed Mar  5 08:12:22 2003

                goto repeat;
        }
        remove_wait_queue(wq, &wait);
-       current->state = TASK_RUNNING;
+       __set_current_state(TASK_RUNNING);
 }

 void wake_up_inode(struct inode *inode)
diff -u linux/fs/locks.c:1.1.1.7 linux/fs/locks.c:1.1.1.1.6.4
--- linux/fs/locks.c:1.1.1.7    Tue Feb 18 12:51:54 2003

        int result = 0;
        DECLARE_WAITQUEUE(wait, current);

-       current->state = TASK_INTERRUPTIBLE;
+       set_current_state (TASK_INTERRUPTIBLE);
        add_wait_queue(fl_wait, &wait);
        if (timeout == 0)

        if (signal_pending(current))
                result = -ERESTARTSYS;
        remove_wait_queue(fl_wait, &wait);
-       current->state = TASK_RUNNING;
+       __set_current_state (TASK_RUNNING);
        return result;
 }

diff -u linux/fs/namei.c:1.1.1.9 linux/fs/namei.c:1.1.1.1.6.6
--- linux/fs/namei.c:1.1.1.9    Tue Feb 18 12:51:54 2003

                goto loop;
        if (current->total_link_count >= 40)
                goto loop;
-       if (need_resched()) {
-               current->state = TASK_RUNNING;
-               schedule();
-       }
+       cond_resched();
        err = security_inode_follow_link(dentry, nd);
        if (err)
                goto loop;
diff -u linux/fs/select.c:1.1.1.5 linux/fs/select.c:1.1.1.1.6.4
--- linux/fs/select.c:1.1.1.5   Fri Jan 10 14:36:46 2003

                }
                __timeout = schedule_timeout(__timeout);
        }
-       current->state = TASK_RUNNING;
+       __set_current_state (TASK_RUNNING);

        poll_freewait(&table);

                        break;
                timeout = schedule_timeout(timeout);
        }
-       current->state = TASK_RUNNING;
+       __set_current_state (TASK_RUNNING);
        return count;
 }

--

Inaky Perez-Gonzalez -- Not speaking for Intel - opinions are my own [or my fault]
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in

More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/