In the first few lines of the fs_init() function it does:

/* The following 2 initializations are needed to let dev_open succeed
fp = (struct fproc *) NULL;
who = FS_PROC_NR;

Then it calls dev_opcl() which constructs a message with:
mess_ptr->PROC_NR = fp - fproc;

What confuses me is that fp - fproc in this case would be NULL - fproc,
which does not seem to have any meaning (Or maybe it does?) Does this
represent a valid process? Why is this initialization necessary?