]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: fix i_lock/snap_rwsem lock inversion (read, not write)
authorSage Weil <sage@newdream.net>
Thu, 21 Aug 2008 18:21:38 +0000 (11:21 -0700)
committerSage Weil <sage@newdream.net>
Thu, 21 Aug 2008 18:21:38 +0000 (11:21 -0700)
src/kernel/caps.c

index dc563aaf1fd2c2f3413dd6fbd45bb9c111312bb0..83351b7092a5b07945f09704f2fccaa814d63f60 100644 (file)
@@ -454,7 +454,7 @@ ack:
                                dout(10, "inverting snap/in locks on %p\n",
                                     inode);
                                spin_unlock(&inode->i_lock);
-                               down_write(&mdsc->snap_rwsem);
+                               down_read(&mdsc->snap_rwsem);
                                took_snap_rwsem = 1;
                                goto retry;
                        }
@@ -492,7 +492,7 @@ ack:
        if (session)
                mutex_unlock(&session->s_mutex);
        if (took_snap_rwsem)
-               up_write(&mdsc->snap_rwsem);
+               up_read(&mdsc->snap_rwsem);
 }