/* * snapshot.c Ceph snapshot context utility routines (part of libceph) * * Copyright (C) 2013 Inktank Storage, Inc. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include #include #include #include /* * Ceph snapshot contexts are reference counted objects, and the * returned structure holds a single reference. Acquire additional * references with ceph_get_snap_context(), and release them with * ceph_put_snap_context(). When the reference count reaches zero * the entire structure is freed. */ /* * Create a new ceph snapshot context large enough to hold the * indicated number of snapshot ids (which can be 0). Caller has * to fill in snapc->seq and snapc->snaps[0..snap_count-1]. * * Returns a null pointer if an error occurs. */ struct ceph_snap_context *ceph_create_snap_context(u32 snap_count, gfp_t gfp_flags) { struct ceph_snap_context *snapc; size_t size; size = sizeof (struct ceph_snap_context); size += snap_count * sizeof (snapc->snaps[0]); snapc = kzalloc(size, gfp_flags); if (!snapc) return NULL; atomic_set(&snapc->nref, 1); snapc->num_snaps = snap_count; return snapc; } EXPORT_SYMBOL(ceph_create_snap_context); struct ceph_snap_context *ceph_get_snap_context(struct ceph_snap_context *sc) { if (sc) atomic_inc(&sc->nref); return sc; } EXPORT_SYMBOL(ceph_get_snap_context); void ceph_put_snap_context(struct ceph_snap_context *sc) { if (!sc) return; if (atomic_dec_and_test(&sc->nref)) { /*printk(" deleting snap_context %p\n", sc);*/ kfree(sc); } } EXPORT_SYMBOL(ceph_put_snap_context); on='/cgit.cgi/linux/net-next.git/log/net/atm/addr.h'>
option value='2'>stat only
AgeCommit message (Expand)AuthorFilesLines
authorMauro Carvalho Chehab <mchehab@s-opensource.com>2016-11-12 12:46:27 -0200
committerLinus Torvalds <torvalds@linux-foundation.org>2016-11-13 10:02:22 -0800
commit1596c387e970cb680d4031fbe4d6eb2c2a4ddb63 (patch)
treeccac90cf3c0b1fc6ee3fa04b0f14f94ce9975d90
parent7724325a19fb0a51d2a69bd2915b33f0ff197f5a (diff)
gp8psk: fix gp8psk_usb_in_op() logic
Commit bc29131ecb10 ("[media] gp8psk: don't do DMA on stack") fixed the usage of DMA on stack, but the memcpy was wrong for gp8psk_usb_in_op(). Fix it. From Derek's email: "Fix confirmed using 2 different Skywalker models with HD mpeg4, SD mpeg2." Suggested-by: Johannes Stezenbach <js@linuxtv.org> Fixes: bc29131ecb10 ("[media] gp8psk: don't do DMA on stack") Tested-by: Derek <user.vdr@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>