[Outreachy kernel] [PATCH 0/2] Staging: lustre: Remove unused functions
Arnd Bergmann
arnd at arndb.de
Thu Oct 22 11:51:05 UTC 2015
On Thursday 22 October 2015 16:59:01 Shraddha Barke wrote:
> On Thu, 22 Oct 2015, Arnd Bergmann wrote:
>
> > On Thursday 22 October 2015 15:16:39 Shraddha Barke wrote:
> >> On Thu, 22 Oct 2015, Arnd Bergmann wrote:
> >>
> >>> On Thursday 22 October 2015 14:50:18 Shraddha Barke wrote:
> >>>> These patches remove the definitions of functions which are not used.
> >>>>
> >>>> Shraddha Barke (2):
> >>>> Staging: lustre: ptlrpc: Remove unused functions
> >>>> Staging: lustre: obdclass: Remove unused functions
> >>>>
> >>>> .../lustre/lustre/obdclass/lprocfs_status.c | 139 ---------------------
> >>>> .../staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c | 63 ----------
> >>>> 2 files changed, 202 deletions(-)
> >>>>
> >>>>
> >>>
> >>> How did you check that they are indeed unused? I suspect these two patches
> >>> are wrong.
> >>
> >> I grepped for the uses of these functions. When I did make
> >> M=drivers/staging/lustre, I didn't get errors. What am I missing here?
> >
> > I see now that you did not remove the declarations from the header files.
> > Please remove those and try again. Alternatively, you should see link-time
> > errors when you try to do 'make' without the listing directory.
>
> Yes, you are right. This patchset is incorrect. However I still don't
> understand why I get these errors when it seems like these
> functions are not used anywhere. confused
The problem here is that there are macros using string concatenation
to create references to these functions in
drivers/staging/lustre/lustre/include/lprocfs_status.h:
#define LPROC_SEQ_FOPS_WR_ONLY(name, type) \
static ssize_t name##_##type##_write(struct file *file, \
const char __user *buffer, size_t count, \
loff_t *off) \
{ \
return lprocfs_wr_##type(file, buffer, count, off); \
} \
static int name##_##type##_open(struct inode *inode, struct file *file) \
{ \
return single_open(file, NULL, inode->i_private); \
} \
static struct file_operations name##_##type##_fops = { \
.open = name##_##type##_open, \
.write = name##_##type##_write, \
.release = lprocfs_single_release, \
}
I made the same mistake when I removed a lot of unused code from this
file system, but I caught it during the compile-testing.
I usually try to avoid macros like this in my own code, or at least make
references to other identifiers explicit. It might be a good idea to
try replacing the macros with calls to the normal APIs that we have
in include/linux/debugfs.h for the same purpose, but I'm not sure if
that is an overall win.
Arnd
More information about the devel
mailing list