mm: fix refcounting in swapon

Grab a reference to bdev before calling blkdev_get(), which expects
the refcount to be already incremented and either returns success or
decrements the refcount and returns an error.

The bug was introduced by e525fd89 (block: make blkdev_get/put()
handle exclusive access), which didn't take into account this behavior
of blkdev_get().

Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by Miklos Szeredi and committed by Linus Torvalds 8074b26f 3c522ced

+1 -1
+1 -1
mm/swapfile.c
··· 1940 1940 1941 1941 error = -EINVAL; 1942 1942 if (S_ISBLK(inode->i_mode)) { 1943 - bdev = I_BDEV(inode); 1943 + bdev = bdgrab(I_BDEV(inode)); 1944 1944 error = blkdev_get(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL, 1945 1945 sys_swapon); 1946 1946 if (error < 0) {