]> Pileus Git - ~andy/linux/blobdiff - drivers/infiniband/core/uverbs_cmd.c
Merge tag 'mfd-3.7-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6
[~andy/linux] / drivers / infiniband / core / uverbs_cmd.c
index f9d0d7c413a25b9e15775acf12ae20335140a2f7..0cb0007724a2d70611b7b1c7e3119dbf90d5d765 100644 (file)
@@ -705,7 +705,7 @@ ssize_t ib_uverbs_open_xrcd(struct ib_uverbs_file *file,
        struct ib_udata                 udata;
        struct ib_uxrcd_object         *obj;
        struct ib_xrcd                 *xrcd = NULL;
-       struct file                    *f = NULL;
+       struct fd                       f = {NULL, 0};
        struct inode                   *inode = NULL;
        int                             ret = 0;
        int                             new_xrcd = 0;
@@ -724,18 +724,13 @@ ssize_t ib_uverbs_open_xrcd(struct ib_uverbs_file *file,
 
        if (cmd.fd != -1) {
                /* search for file descriptor */
-               f = fget(cmd.fd);
-               if (!f) {
-                       ret = -EBADF;
-                       goto err_tree_mutex_unlock;
-               }
-
-               inode = f->f_dentry->d_inode;
-               if (!inode) {
+               f = fdget(cmd.fd);
+               if (!f.file) {
                        ret = -EBADF;
                        goto err_tree_mutex_unlock;
                }
 
+               inode = f.file->f_path.dentry->d_inode;
                xrcd = find_xrcd(file->device, inode);
                if (!xrcd && !(cmd.oflags & O_CREAT)) {
                        /* no file descriptor. Need CREATE flag */
@@ -800,8 +795,8 @@ ssize_t ib_uverbs_open_xrcd(struct ib_uverbs_file *file,
                goto err_copy;
        }
 
-       if (f)
-               fput(f);
+       if (f.file)
+               fdput(f);
 
        mutex_lock(&file->mutex);
        list_add_tail(&obj->uobject.list, &file->ucontext->xrcd_list);
@@ -830,8 +825,8 @@ err:
        put_uobj_write(&obj->uobject);
 
 err_tree_mutex_unlock:
-       if (f)
-               fput(f);
+       if (f.file)
+               fdput(f);
 
        mutex_unlock(&file->device->xrcd_tree_mutex);