I basically am running into a very odd situation in a system call that I am writing. I want to check some values if they are the same return -2 which indicates a certain type of error has occurred. I am using printk() to print the values of the variables right before my "else if" and it says that they are equal to one another but yet the conditional is not being executed (i.e. we don't enter the else if) I am fairly new to working in the kernel but this seems very off to me and am wondering if there is some nuance of working in the kernel I am not aware of so if anyone could venture a guess as to why if I know the values of my variables the conditional would not execute I would really appreciate your help

//---------------------------------------//

```
/*  sys_receiveMsg421()
     Description:
    - Copies the first message in the mailbox into <msg>
*/
asmlinkage long sys_receiveMsg421(unsigned long mbxID, char *msg, unsigned long N)
{

int result = 0;
int mboxIndex = checkBoxId(mbxID);
int msgIndex = 0;

//acquire the lock
down_interruptible(&sem);

//check to make sure the mailbox with <mbxID> exists
if(!mboxIndex)
{
    //free our lock
    up(&sem);
    return -1;
}

else
    mboxIndex--;

printk("<1>mboxIndex = %d\nNumber of messages = %dCurrent Msg = %d\n",mboxIndex, groupBox.boxes[mboxIndex].numMessages, groupBox.boxes[mboxIndex].currentMsg );

//check to make sure we have a message to recieve

-----------CODE NOT EXECUTING HERE------------------------------------------------
if(groupBox.boxes[mboxIndex].numMessages == groupBox.boxes[mboxIndex].currentMsg)
{
    //free our lock
    up(&sem);   
    return -2;
}
//retrieve the message
else
{
     //check to make sure the msg is a valid pointer before continuing
    if(!access_ok(VERIFY_READ, msg, N * sizeof(char)))
    {
        printk("<1>Access has been denied for %lu\n", mbxID);
        //free our lock
        up(&sem);
        return -1;
    }
    else
    {
        //calculate the index of the message to be retrieved            
        msgIndex = groupBox.boxes[mboxIndex].currentMsg;    

        //copy from kernel to user variable     
        result = copy_to_user(msg, groupBox.boxes[mboxIndex].messages[msgIndex], N);

        //increment message position
        groupBox.boxes[mboxIndex].currentMsg++;

        //free our lock
        up(&sem);

        //return number of bytes copied
        return (N - result);
    }
}
}

```

UPDATE: Solved my problem by just changing the return value to something else and it works fine very weird though