V4L/DVB (13555): v4l: Use video_device_node_name() instead of the minor number
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Thu, 10 Dec 2009 13:47:13 +0000 (11:47 -0200)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 16 Dec 2009 02:17:57 +0000 (00:17 -0200)
Instead of using the minor number in kernel log messages, use the device
node name as returned by the video_device_node_name() function. This
makes debug, informational and error messages easier to understand for
end users.

[mchehab.redhat.com: removed tm6000 changes as tm6000 is not ready yet for submission even on staging]

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
26 files changed:
drivers/media/common/saa7146_fops.c
drivers/media/video/bt8xx/bttv-driver.c
drivers/media/video/cx18/cx18-fileops.c
drivers/media/video/cx231xx/cx231xx-video.c
drivers/media/video/cx23885/cx23885-video.c
drivers/media/video/cx88/cx88-blackbird.c
drivers/media/video/cx88/cx88-video.c
drivers/media/video/em28xx/em28xx-video.c
drivers/media/video/ivtv/ivtv-fileops.c
drivers/media/video/ov511.c
drivers/media/video/s2255drv.c
drivers/media/video/saa7134/saa7134-empress.c
drivers/media/video/saa7134/saa7134-video.c
drivers/media/video/vivi.c
drivers/staging/cx25821/cx25821-audups11.c
drivers/staging/cx25821/cx25821-video0.c
drivers/staging/cx25821/cx25821-video1.c
drivers/staging/cx25821/cx25821-video2.c
drivers/staging/cx25821/cx25821-video3.c
drivers/staging/cx25821/cx25821-video4.c
drivers/staging/cx25821/cx25821-video5.c
drivers/staging/cx25821/cx25821-video6.c
drivers/staging/cx25821/cx25821-video7.c
drivers/staging/cx25821/cx25821-videoioctl.c
drivers/staging/cx25821/cx25821-vidups10.c
drivers/staging/cx25821/cx25821-vidups9.c

index 2d9fc24..3c11cff 100644 (file)
@@ -194,7 +194,6 @@ void saa7146_buffer_timeout(unsigned long data)
 
 static int fops_open(struct file *file)
 {
-       unsigned int minor = video_devdata(file)->minor;
        struct video_device *vdev = video_devdata(file);
        struct saa7146_dev *dev = video_drvdata(file);
        struct saa7146_fh *fh = NULL;
@@ -202,7 +201,7 @@ static int fops_open(struct file *file)
 
        enum v4l2_buf_type type;
 
-       DEB_EE(("file:%p, minor:%d\n", file, minor));
+       DEB_EE(("file:%p, dev:%s\n", file, video_device_node_name(vdev)));
 
        if (mutex_lock_interruptible(&saa7146_devices_lock))
                return -ERESTARTSYS;
index a233691..dcad2f7 100644 (file)
@@ -3207,11 +3207,12 @@ err:
 static int bttv_open(struct file *file)
 {
        int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct bttv *btv = video_drvdata(file);
        struct bttv_fh *fh;
        enum v4l2_buf_type type = 0;
 
-       dprintk(KERN_DEBUG "bttv: open minor=%d\n",minor);
+       dprintk(KERN_DEBUG "bttv: open dev=%s\n", video_device_node_name(vdev));
 
        lock_kernel();
        if (btv->video_dev->minor == minor) {
@@ -3409,10 +3410,11 @@ static struct video_device bttv_video_template = {
 static int radio_open(struct file *file)
 {
        int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct bttv *btv = video_drvdata(file);
        struct bttv_fh *fh;
 
-       dprintk("bttv: open minor=%d\n",minor);
+       dprintk("bttv: open dev=%s\n", video_device_node_name(vdev));
 
        lock_kernel();
        WARN_ON(btv->radio_dev && btv->radio_dev->minor != minor);
index 4e278db..c0885c6 100644 (file)
@@ -758,8 +758,8 @@ int cx18_v4l2_open(struct file *filp)
 
        mutex_lock(&cx->serialize_lock);
        if (cx18_init_on_first_open(cx)) {
-               CX18_ERR("Failed to initialize on minor %d\n",
-                        video_dev->minor);
+               CX18_ERR("Failed to initialize on %s\n",
+                        video_device_node_name(video_dev));
                mutex_unlock(&cx->serialize_lock);
                return -ENXIO;
        }
index 3fc7a6f..552dff5 100644 (file)
@@ -1916,7 +1916,6 @@ static int radio_queryctrl(struct file *file, void *priv,
  */
 static int cx231xx_v4l2_open(struct file *filp)
 {
-       int minor = video_devdata(filp)->minor;
        int errCode = 0, radio = 0;
        struct video_device *vdev = video_devdata(filp);
        struct cx231xx *dev = video_drvdata(filp);
@@ -1937,8 +1936,9 @@ static int cx231xx_v4l2_open(struct file *filp)
 
        mutex_lock(&dev->lock);
 
-       cx231xx_videodbg("open minor=%d type=%s users=%d\n",
-                        minor, v4l2_type_names[fh_type], dev->users);
+       cx231xx_videodbg("open dev=%s type=%s users=%d\n",
+                        video_device_node_name(vdev), v4l2_type_names[fh_type],
+                        dev->users);
 
 #if 0
        errCode = cx231xx_set_mode(dev, CX231XX_ANALOG_MODE);
index e10f28c..e8ca8bb 100644 (file)
@@ -717,7 +717,6 @@ static int get_resource(struct cx23885_fh *fh)
 
 static int video_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
        struct video_device *vdev = video_devdata(file);
        struct cx23885_dev *dev = video_drvdata(file);
        struct cx23885_fh *fh;
@@ -736,8 +735,8 @@ static int video_open(struct file *file)
                break;
        }
 
-       dprintk(1, "open minor=%d radio=%d type=%s\n",
-               minor, radio, v4l2_type_names[type]);
+       dprintk(1, "open dev=%s radio=%d type=%s\n",
+               video_device_node_name(vdev), radio, v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh), GFP_KERNEL);
index f0ef941..03e592e 100644 (file)
@@ -1048,7 +1048,7 @@ static int vidioc_s_std (struct file *file, void *priv, v4l2_std_id *id)
 
 static int mpeg_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct cx8802_dev *dev = video_drvdata(file);
        struct cx8802_fh *fh;
        struct cx8802_driver *drv = NULL;
@@ -1075,7 +1075,7 @@ static int mpeg_open(struct file *file)
                unlock_kernel();
                return -EINVAL;
        }
-       dprintk(1,"open minor=%d\n",minor);
+       dprintk(1, "open dev=%s\n", video_device_node_name(vdev));
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh),GFP_KERNEL);
index 7583991..0013cb4 100644 (file)
@@ -749,7 +749,6 @@ static int get_ressource(struct cx8800_fh *fh)
 
 static int video_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
        struct video_device *vdev = video_devdata(file);
        struct cx8800_dev *dev = video_drvdata(file);
        struct cx88_core *core;
@@ -773,8 +772,8 @@ static int video_open(struct file *file)
 
        core = dev->core;
 
-       dprintk(1,"open minor=%d radio=%d type=%s\n",
-               minor,radio,v4l2_type_names[type]);
+       dprintk(1, "open dev=%s radio=%d type=%s\n",
+               video_device_node_name(vdev), radio, v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh),GFP_KERNEL);
index dd9bbe8..0408727 100644 (file)
@@ -2081,7 +2081,6 @@ static int radio_queryctrl(struct file *file, void *priv,
  */
 static int em28xx_v4l2_open(struct file *filp)
 {
-       int minor = video_devdata(filp)->minor;
        int errCode = 0, radio = 0;
        struct video_device *vdev = video_devdata(filp);
        struct em28xx *dev = video_drvdata(filp);
@@ -2103,8 +2102,9 @@ static int em28xx_v4l2_open(struct file *filp)
 
        mutex_lock(&dev->lock);
 
-       em28xx_videodbg("open minor=%d type=%s users=%d\n",
-                               minor, v4l2_type_names[fh_type], dev->users);
+       em28xx_videodbg("open dev=%s type=%s users=%d\n",
+                       video_device_node_name(vdev), v4l2_type_names[fh_type],
+                       dev->users);
 
 
        fh = kzalloc(sizeof(struct em28xx_fh), GFP_KERNEL);
index e707ef3..babcabd 100644 (file)
@@ -985,8 +985,8 @@ int ivtv_v4l2_open(struct file *filp)
 
        mutex_lock(&itv->serialize_lock);
        if (ivtv_init_on_first_open(itv)) {
-               IVTV_ERR("Failed to initialize on minor %d\n",
-                               vdev->minor);
+               IVTV_ERR("Failed to initialize on device %s\n",
+                        video_device_node_name(vdev));
                mutex_unlock(&itv->serialize_lock);
                return -ENXIO;
        }
index b636160..939ae8b 100644 (file)
@@ -5867,8 +5867,8 @@ ov51x_probe(struct usb_interface *intf, const struct usb_device_id *id)
        ov511_devused |= 1 << nr;
        ov->nr = nr;
 
-       dev_info(&intf->dev, "Device at %s registered to minor %d\n",
-                ov->usb_path, ov->vdev->minor);
+       dev_info(&intf->dev, "Device at %s registered to %s\n",
+                ov->usb_path, video_device_node_name(ov->vdev));
 
        usb_set_intfdata(intf, ov);
        if (ov_create_sysfs(ov->vdev)) {
index 0a77108..f6a4929 100644 (file)
@@ -1530,7 +1530,6 @@ static int vidioc_s_parm(struct file *file, void *priv,
 }
 static int s2255_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
        struct video_device *vdev = video_devdata(file);
        struct s2255_dev *dev = video_drvdata(file);
        struct s2255_fh *fh;
@@ -1538,7 +1537,9 @@ static int s2255_open(struct file *file)
        int i = 0;
        int cur_channel = -1;
        int state;
-       dprintk(1, "s2255: open called (minor=%d)\n", minor);
+
+       dprintk(1, "s2255: open called (dev=%s)\n",
+               video_device_node_name(vdev));
 
        lock_kernel();
 
@@ -1650,8 +1651,9 @@ static int s2255_open(struct file *file)
        for (i = 0; i < ARRAY_SIZE(s2255_qctrl); i++)
                qctl_regs[i] = s2255_qctrl[i].default_value;
 
-       dprintk(1, "s2255drv: open minor=%d type=%s users=%d\n",
-               minor, v4l2_type_names[type], dev->users[cur_channel]);
+       dprintk(1, "s2255drv: open dev=%s type=%s users=%d\n",
+               video_device_node_name(vdev), v4l2_type_names[type],
+               dev->users[cur_channel]);
        dprintk(2, "s2255drv: open: fh=0x%08lx, dev=0x%08lx, vidq=0x%08lx\n",
                (unsigned long)fh, (unsigned long)dev,
                (unsigned long)&dev->vidq[cur_channel]);
@@ -1728,7 +1730,8 @@ static int s2255_close(struct file *file)
 {
        struct s2255_fh *fh = file->private_data;
        struct s2255_dev *dev = fh->dev;
-       int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
+
        if (!dev)
                return -ENODEV;
 
@@ -1748,8 +1751,8 @@ static int s2255_close(struct file *file)
        mutex_unlock(&dev->open_lock);
 
        kref_put(&dev->kref, s2255_destroy);
-       dprintk(1, "s2255: close called (minor=%d, users=%d)\n",
-               minor, dev->users[fh->channel]);
+       dprintk(1, "s2255: close called (dev=%s, users=%d)\n",
+               video_device_node_name(vdev), dev->users[fh->channel]);
        kfree(fh);
        return 0;
 }
index 1de27af..df56241 100644 (file)
@@ -86,11 +86,11 @@ static int ts_init_encoder(struct saa7134_dev* dev)
 
 static int ts_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct saa7134_dev *dev = video_drvdata(file);
        int err;
 
-       dprintk("open minor=%d\n",minor);
+       dprintk("open dev=%s\n", video_device_node_name(vdev));
        err = -EBUSY;
        if (!mutex_trylock(&dev->empress_tsq.vb_lock))
                goto done;
index bcca5a4..9d26b1b 100644 (file)
@@ -1326,7 +1326,6 @@ static int saa7134_resource(struct saa7134_fh *fh)
 
 static int video_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
        struct video_device *vdev = video_devdata(file);
        struct saa7134_dev *dev = video_drvdata(file);
        struct saa7134_fh *fh;
@@ -1345,8 +1344,8 @@ static int video_open(struct file *file)
                break;
        }
 
-       dprintk("open minor=%d radio=%d type=%s\n",minor,radio,
-               v4l2_type_names[type]);
+       dprintk("open dev=%s radio=%d type=%s\n", video_device_node_name(vdev),
+               radio, v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh),GFP_KERNEL);
index 93e0a25..ce197e4 100644 (file)
@@ -1222,8 +1222,7 @@ static int vivi_close(struct file *file)
        struct vivi_fh         *fh = file->private_data;
        struct vivi_dev *dev       = fh->dev;
        struct vivi_dmaqueue *vidq = &dev->vidq;
-
-       int minor = video_devdata(file)->minor;
+       struct video_device  *vdev = video_devdata(file);
 
        vivi_stop_thread(vidq);
        videobuf_stop(&fh->vb_vidq);
@@ -1235,8 +1234,8 @@ static int vivi_close(struct file *file)
        dev->users--;
        mutex_unlock(&dev->mutex);
 
-       dprintk(dev, 1, "close called (minor=%d, users=%d)\n",
-               minor, dev->users);
+       dprintk(dev, 1, "close called (dev=%s, users=%d)\n",
+               video_device_node_name(vdev), dev->users);
 
        return 0;
 }
index e1364d1..a2fcbf0 100644 (file)
@@ -94,12 +94,13 @@ static struct videobuf_queue_ops cx25821_video_qops = {
 
 static int video_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct cx25821_dev *dev = video_drvdata(file);
        struct cx25821_fh *fh;
        enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
 
-       printk("open minor=%d type=%s\n", minor, v4l2_type_names[type]);
+       printk("open dev=%s type=%s\n", video_device_node_name(vdev),
+               v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh), GFP_KERNEL);
index eb0fe81..9a47420 100644 (file)
@@ -94,13 +94,14 @@ static struct videobuf_queue_ops cx25821_video_qops = {
 
 static int video_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct cx25821_dev *dev = video_drvdata(file);
        struct cx25821_fh *fh;
        enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        u32 pix_format;
 
-       printk("open minor=%d type=%s\n", minor, v4l2_type_names[type]);
+       printk("open dev=%s type=%s\n", video_device_node_name(vdev),
+               v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh), GFP_KERNEL);
index 96ec238..fc9c118 100644 (file)
@@ -94,13 +94,14 @@ static struct videobuf_queue_ops cx25821_video_qops = {
 
 static int video_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct cx25821_dev *dev = video_drvdata(file);
        struct cx25821_fh *fh;
        enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        u32 pix_format;
 
-       printk("open minor=%d type=%s\n", minor, v4l2_type_names[type]);
+       printk("open dev=%s type=%s\n", video_device_node_name(vdev),
+               v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh), GFP_KERNEL);
index e659603..7466829 100644 (file)
@@ -94,13 +94,14 @@ static struct videobuf_queue_ops cx25821_video_qops = {
 
 static int video_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct cx25821_dev *dev = video_drvdata(file);
        struct cx25821_fh *fh;
        enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        u32 pix_format;
 
-       printk("open minor=%d type=%s\n", minor, v4l2_type_names[type]);
+       printk("open dev=%s type=%s\n", video_device_node_name(vdev),
+               v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh), GFP_KERNEL);
index 873f0f8..0806e40 100644 (file)
@@ -94,13 +94,14 @@ static struct videobuf_queue_ops cx25821_video_qops = {
 
 static int video_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct cx25821_dev *dev = video_drvdata(file);
        struct cx25821_fh *fh;
        enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        u32 pix_format;
 
-       printk("open minor=%d type=%s\n", minor, v4l2_type_names[type]);
+       printk("open dev=%s type=%s\n", video_device_node_name(vdev),
+               v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh), GFP_KERNEL);
index c00e3f8..f44e1d4 100644 (file)
@@ -94,13 +94,14 @@ static struct videobuf_queue_ops cx25821_video_qops = {
 
 static int video_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct cx25821_dev *dev = video_drvdata(file);
        struct cx25821_fh *fh;
        enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        u32 pix_format;
 
-       printk("open minor=%d type=%s\n", minor, v4l2_type_names[type]);
+       printk("open dev=%s type=%s\n", video_device_node_name(vdev),
+               v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh), GFP_KERNEL);
index 06396b8..85028ea 100644 (file)
@@ -94,13 +94,14 @@ static struct videobuf_queue_ops cx25821_video_qops = {
 
 static int video_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct cx25821_dev *dev = video_drvdata(file);
        struct cx25821_fh *fh;
        enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        u32 pix_format;
 
-       printk("open minor=%d type=%s\n", minor, v4l2_type_names[type]);
+       printk("open dev=%s type=%s\n", video_device_node_name(vdev),
+               v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh), GFP_KERNEL);
index c5410c1..27afa03 100644 (file)
@@ -94,13 +94,14 @@ static struct videobuf_queue_ops cx25821_video_qops = {
 
 static int video_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct cx25821_dev *dev = video_drvdata(file);
        struct cx25821_fh *fh;
        enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        u32 pix_format;
 
-       printk("open minor=%d type=%s\n", minor, v4l2_type_names[type]);
+       printk("open dev=%s type=%s\n", video_device_node_name(vdev),
+               v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh), GFP_KERNEL);
index 274977e..055a7ef 100644 (file)
@@ -93,13 +93,14 @@ static struct videobuf_queue_ops cx25821_video_qops = {
 
 static int video_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct cx25821_dev *dev = video_drvdata(file);
        struct cx25821_fh *fh;
        enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        u32 pix_format;
 
-       printk("open minor=%d type=%s\n", minor, v4l2_type_names[type]);
+       printk("open dev=%s type=%s\n", video_device_node_name(vdev),
+               v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh), GFP_KERNEL);
index 42ea8bf..ae33355 100644 (file)
@@ -94,13 +94,14 @@ static struct videobuf_queue_ops cx25821_video_qops = {
 
 static int video_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct cx25821_dev *dev = video_drvdata(file);
        struct cx25821_fh *fh;
        enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        u32 pix_format;
 
-       printk("open minor=%d type=%s\n", minor, v4l2_type_names[type]);
+       printk("open dev=%s type=%s\n", video_device_node_name(vdev),
+               v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh), GFP_KERNEL);
index 4e0033f..97db6cd 100644 (file)
@@ -94,12 +94,13 @@ static struct videobuf_queue_ops cx25821_video_qops = {
 
 static int video_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct cx25821_dev *dev = video_drvdata(file);
        struct cx25821_fh *fh;
        enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
 
-       printk("open minor=%d type=%s\n", minor, v4l2_type_names[type]);
+       printk("open dev=%s type=%s\n", video_device_node_name(vdev),
+               v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh), GFP_KERNEL);
index 67fc082..d06054f 100644 (file)
@@ -94,12 +94,13 @@ static struct videobuf_queue_ops cx25821_video_qops = {
 
 static int video_open(struct file *file)
 {
-       int minor = video_devdata(file)->minor;
+       struct video_device *vdev = video_devdata(file);
        struct cx25821_dev *dev = video_drvdata(file);
        struct cx25821_fh *fh;
        enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
 
-       printk("open minor=%d type=%s\n", minor, v4l2_type_names[type]);
+       printk("open dev=%s type=%s\n", video_device_node_name(vdev),
+               v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh), GFP_KERNEL);