Staging tree fixes for 3.6-rc6
Here are a few staging tree fixes for problems that have been reported. Nothing major, just a number of tiny driver fixes. All of these have been in the linux-next tree for a while. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) iEYEABECAAYFAlBSF54ACgkQMUfUDdst+ykh/wCeOAGv4uwvqK8pkYpdV4+XOlM/ W1QAnRvjv4dCj0e2+W46Vp5xLPPOBePk =IyFJ -----END PGP SIGNATURE----- Merge tag 'staging-3.6-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging Pull staging tree fixes from Greg Kroah-Hartman: "Here are a few staging tree fixes for problems that have been reported. Nothing major, just a number of tiny driver fixes. All of these have been in the linux-next tree for a while. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>" * tag 'staging-3.6-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: drm/omap: add more new timings fields drm/omap: update for interlaced staging: r8712u: fix bug in r8712_recv_indicatepkt() staging: zcache: fix cleancache race condition with shrinker Staging: Android alarm: IOCTL command encoding fix staging: vt6656: [BUG] - Failed connection, incorrect endian. staging: ozwpan: fix memcmp() test in oz_set_active_pd() staging: wlan-ng: Fix problem with wrong arguments staging: comedi: das08: Correct AO output for das08jr-16-ao staging: comedi: das08: Correct AI encoding for das08jr-16-ao staging: comedi: das08: Fix PCI ref count staging: comedi: amplc_pci230: Fix PCI ref count staging: comedi: amplc_pc263: Fix PCI ref count staging: comedi: amplc_pc236: Fix PCI ref count staging: comedi: amplc_dio200: Fix PCI ref count staging: comedi: amplc_pci224: Fix PCI ref count drivers/iio/adc/at91_adc.c: adjust inconsistent IS_ERR and PTR_ERR staging iio: fix potential memory leak in lis3l02dq_ring.c staging:iio: prevent divide by zero bugs
This commit is contained in:
commit
f2378e386f
|
@ -617,7 +617,7 @@ static int __devinit at91_adc_probe(struct platform_device *pdev)
|
|||
st->adc_clk = clk_get(&pdev->dev, "adc_op_clk");
|
||||
if (IS_ERR(st->adc_clk)) {
|
||||
dev_err(&pdev->dev, "Failed to get the ADC clock.\n");
|
||||
ret = PTR_ERR(st->clk);
|
||||
ret = PTR_ERR(st->adc_clk);
|
||||
goto error_disable_clk;
|
||||
}
|
||||
|
||||
|
|
|
@ -51,10 +51,12 @@ enum android_alarm_return_flags {
|
|||
#define ANDROID_ALARM_WAIT _IO('a', 1)
|
||||
|
||||
#define ALARM_IOW(c, type, size) _IOW('a', (c) | ((type) << 4), size)
|
||||
#define ALARM_IOR(c, type, size) _IOR('a', (c) | ((type) << 4), size)
|
||||
|
||||
/* Set alarm */
|
||||
#define ANDROID_ALARM_SET(type) ALARM_IOW(2, type, struct timespec)
|
||||
#define ANDROID_ALARM_SET_AND_WAIT(type) ALARM_IOW(3, type, struct timespec)
|
||||
#define ANDROID_ALARM_GET_TIME(type) ALARM_IOW(4, type, struct timespec)
|
||||
#define ANDROID_ALARM_GET_TIME(type) ALARM_IOR(4, type, struct timespec)
|
||||
#define ANDROID_ALARM_SET_RTC _IOW('a', 5, struct timespec)
|
||||
#define ANDROID_ALARM_BASE_CMD(cmd) (cmd & ~(_IOC(0, 0, 0xf0, 0)))
|
||||
#define ANDROID_ALARM_IOCTL_TO_TYPE(cmd) (_IOC_NR(cmd) >> 4)
|
||||
|
|
|
@ -1412,6 +1412,13 @@ static int __devinit dio200_attach_pci(struct comedi_device *dev,
|
|||
dev_err(dev->class_dev, "BUG! cannot determine board type!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
/*
|
||||
* Need to 'get' the PCI device to match the 'put' in dio200_detach().
|
||||
* TODO: Remove the pci_dev_get() and matching pci_dev_put() once
|
||||
* support for manual attachment of PCI devices via dio200_attach()
|
||||
* has been removed.
|
||||
*/
|
||||
pci_dev_get(pci_dev);
|
||||
return dio200_pci_common_attach(dev, pci_dev);
|
||||
}
|
||||
|
||||
|
|
|
@ -565,6 +565,13 @@ static int __devinit pc236_attach_pci(struct comedi_device *dev,
|
|||
dev_err(dev->class_dev, "BUG! cannot determine board type!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
/*
|
||||
* Need to 'get' the PCI device to match the 'put' in pc236_detach().
|
||||
* TODO: Remove the pci_dev_get() and matching pci_dev_put() once
|
||||
* support for manual attachment of PCI devices via pc236_attach()
|
||||
* has been removed.
|
||||
*/
|
||||
pci_dev_get(pci_dev);
|
||||
return pc236_pci_common_attach(dev, pci_dev);
|
||||
}
|
||||
|
||||
|
|
|
@ -298,6 +298,13 @@ static int __devinit pc263_attach_pci(struct comedi_device *dev,
|
|||
dev_err(dev->class_dev, "BUG! cannot determine board type!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
/*
|
||||
* Need to 'get' the PCI device to match the 'put' in pc263_detach().
|
||||
* TODO: Remove the pci_dev_get() and matching pci_dev_put() once
|
||||
* support for manual attachment of PCI devices via pc263_attach()
|
||||
* has been removed.
|
||||
*/
|
||||
pci_dev_get(pci_dev);
|
||||
return pc263_pci_common_attach(dev, pci_dev);
|
||||
}
|
||||
|
||||
|
|
|
@ -1503,6 +1503,13 @@ pci224_attach_pci(struct comedi_device *dev, struct pci_dev *pci_dev)
|
|||
DRIVER_NAME ": BUG! cannot determine board type!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
/*
|
||||
* Need to 'get' the PCI device to match the 'put' in pci224_detach().
|
||||
* TODO: Remove the pci_dev_get() and matching pci_dev_put() once
|
||||
* support for manual attachment of PCI devices via pci224_attach()
|
||||
* has been removed.
|
||||
*/
|
||||
pci_dev_get(pci_dev);
|
||||
return pci224_attach_common(dev, pci_dev, NULL);
|
||||
}
|
||||
|
||||
|
|
|
@ -2925,6 +2925,13 @@ static int __devinit pci230_attach_pci(struct comedi_device *dev,
|
|||
"amplc_pci230: BUG! cannot determine board type!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
/*
|
||||
* Need to 'get' the PCI device to match the 'put' in pci230_detach().
|
||||
* TODO: Remove the pci_dev_get() and matching pci_dev_put() once
|
||||
* support for manual attachment of PCI devices via pci230_attach()
|
||||
* has been removed.
|
||||
*/
|
||||
pci_dev_get(pci_dev);
|
||||
return pci230_attach_common(dev, pci_dev);
|
||||
}
|
||||
|
||||
|
|
|
@ -378,7 +378,7 @@ das08jr_ao_winsn(struct comedi_device *dev, struct comedi_subdevice *s,
|
|||
int chan;
|
||||
|
||||
lsb = data[0] & 0xff;
|
||||
msb = (data[0] >> 8) & 0xf;
|
||||
msb = (data[0] >> 8) & 0xff;
|
||||
|
||||
chan = CR_CHAN(insn->chanspec);
|
||||
|
||||
|
@ -623,7 +623,7 @@ static const struct das08_board_struct das08_boards[] = {
|
|||
.ai = das08_ai_rinsn,
|
||||
.ai_nbits = 16,
|
||||
.ai_pg = das08_pg_none,
|
||||
.ai_encoding = das08_encode12,
|
||||
.ai_encoding = das08_encode16,
|
||||
.ao = das08jr_ao_winsn,
|
||||
.ao_nbits = 16,
|
||||
.di = das08jr_di_rbits,
|
||||
|
@ -922,6 +922,13 @@ das08_attach_pci(struct comedi_device *dev, struct pci_dev *pdev)
|
|||
dev_err(dev->class_dev, "BUG! cannot determine board type!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
/*
|
||||
* Need to 'get' the PCI device to match the 'put' in das08_detach().
|
||||
* TODO: Remove the pci_dev_get() and matching pci_dev_put() once
|
||||
* support for manual attachment of PCI devices via das08_attach()
|
||||
* has been removed.
|
||||
*/
|
||||
pci_dev_get(pdev);
|
||||
return das08_pci_attach_common(dev, pdev);
|
||||
}
|
||||
|
||||
|
|
|
@ -121,8 +121,10 @@ static int lis3l02dq_get_buffer_element(struct iio_dev *indio_dev,
|
|||
if (rx_array == NULL)
|
||||
return -ENOMEM;
|
||||
ret = lis3l02dq_read_all(indio_dev, rx_array);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
kfree(rx_array);
|
||||
return ret;
|
||||
}
|
||||
for (i = 0; i < scan_count; i++)
|
||||
data[i] = combine_8_to_16(rx_array[i*4+1],
|
||||
rx_array[i*4+3]);
|
||||
|
|
|
@ -647,6 +647,8 @@ static ssize_t ad7192_write_frequency(struct device *dev,
|
|||
ret = strict_strtoul(buf, 10, &lval);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (lval == 0)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&indio_dev->mlock);
|
||||
if (iio_buffer_enabled(indio_dev)) {
|
||||
|
|
|
@ -195,6 +195,8 @@ static ssize_t adis16260_write_frequency(struct device *dev,
|
|||
ret = strict_strtol(buf, 10, &val);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (val == 0)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&indio_dev->mlock);
|
||||
if (spi_get_device_id(st->us)) {
|
||||
|
|
|
@ -234,6 +234,8 @@ static ssize_t adis16400_write_frequency(struct device *dev,
|
|||
ret = strict_strtol(buf, 10, &val);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (val == 0)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&indio_dev->mlock);
|
||||
|
||||
|
|
|
@ -425,6 +425,8 @@ static ssize_t ade7753_write_frequency(struct device *dev,
|
|||
ret = strict_strtol(buf, 10, &val);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (val == 0)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&indio_dev->mlock);
|
||||
|
||||
|
|
|
@ -445,6 +445,8 @@ static ssize_t ade7754_write_frequency(struct device *dev,
|
|||
ret = strict_strtol(buf, 10, &val);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (val == 0)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&indio_dev->mlock);
|
||||
|
||||
|
|
|
@ -385,6 +385,8 @@ static ssize_t ade7759_write_frequency(struct device *dev,
|
|||
ret = strict_strtol(buf, 10, &val);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (val == 0)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&indio_dev->mlock);
|
||||
|
||||
|
|
|
@ -48,13 +48,20 @@ static inline void copy_timings_omap_to_drm(struct drm_display_mode *mode,
|
|||
mode->vsync_end = mode->vsync_start + timings->vsw;
|
||||
mode->vtotal = mode->vsync_end + timings->vbp;
|
||||
|
||||
/* note: whether or not it is interlaced, +/- h/vsync, etc,
|
||||
* which should be set in the mode flags, is not exposed in
|
||||
* the omap_video_timings struct.. but hdmi driver tracks
|
||||
* those separately so all we have to have to set the mode
|
||||
* is the way to recover these timings values, and the
|
||||
* omap_dss_driver would do the rest.
|
||||
*/
|
||||
mode->flags = 0;
|
||||
|
||||
if (timings->interlace)
|
||||
mode->flags |= DRM_MODE_FLAG_INTERLACE;
|
||||
|
||||
if (timings->hsync_level == OMAPDSS_SIG_ACTIVE_HIGH)
|
||||
mode->flags |= DRM_MODE_FLAG_PHSYNC;
|
||||
else
|
||||
mode->flags |= DRM_MODE_FLAG_NHSYNC;
|
||||
|
||||
if (timings->vsync_level == OMAPDSS_SIG_ACTIVE_HIGH)
|
||||
mode->flags |= DRM_MODE_FLAG_PVSYNC;
|
||||
else
|
||||
mode->flags |= DRM_MODE_FLAG_NVSYNC;
|
||||
}
|
||||
|
||||
static inline void copy_timings_drm_to_omap(struct omap_video_timings *timings,
|
||||
|
@ -71,6 +78,22 @@ static inline void copy_timings_drm_to_omap(struct omap_video_timings *timings,
|
|||
timings->vfp = mode->vsync_start - mode->vdisplay;
|
||||
timings->vsw = mode->vsync_end - mode->vsync_start;
|
||||
timings->vbp = mode->vtotal - mode->vsync_end;
|
||||
|
||||
timings->interlace = !!(mode->flags & DRM_MODE_FLAG_INTERLACE);
|
||||
|
||||
if (mode->flags & DRM_MODE_FLAG_PHSYNC)
|
||||
timings->hsync_level = OMAPDSS_SIG_ACTIVE_HIGH;
|
||||
else
|
||||
timings->hsync_level = OMAPDSS_SIG_ACTIVE_LOW;
|
||||
|
||||
if (mode->flags & DRM_MODE_FLAG_PVSYNC)
|
||||
timings->vsync_level = OMAPDSS_SIG_ACTIVE_HIGH;
|
||||
else
|
||||
timings->vsync_level = OMAPDSS_SIG_ACTIVE_LOW;
|
||||
|
||||
timings->data_pclk_edge = OMAPDSS_DRIVE_SIG_RISING_EDGE;
|
||||
timings->de_level = OMAPDSS_SIG_ACTIVE_HIGH;
|
||||
timings->sync_pclk_edge = OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES;
|
||||
}
|
||||
|
||||
static void omap_connector_dpms(struct drm_connector *connector, int mode)
|
||||
|
@ -187,7 +210,7 @@ static int omap_connector_get_modes(struct drm_connector *connector)
|
|||
}
|
||||
} else {
|
||||
struct drm_display_mode *mode = drm_mode_create(dev);
|
||||
struct omap_video_timings timings;
|
||||
struct omap_video_timings timings = {0};
|
||||
|
||||
dssdrv->get_timings(dssdev, &timings);
|
||||
|
||||
|
@ -291,7 +314,7 @@ void omap_connector_mode_set(struct drm_connector *connector,
|
|||
struct omap_connector *omap_connector = to_omap_connector(connector);
|
||||
struct omap_dss_device *dssdev = omap_connector->dssdev;
|
||||
struct omap_dss_driver *dssdrv = dssdev->driver;
|
||||
struct omap_video_timings timings;
|
||||
struct omap_video_timings timings = {0};
|
||||
|
||||
copy_timings_drm_to_omap(&timings, mode);
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include <linux/cdev.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/sched.h>
|
||||
#include "ozconfig.h"
|
||||
|
@ -213,7 +214,7 @@ static int oz_set_active_pd(u8 *addr)
|
|||
if (old_pd)
|
||||
oz_pd_put(old_pd);
|
||||
} else {
|
||||
if (!memcmp(addr, "\0\0\0\0\0\0", sizeof(addr))) {
|
||||
if (is_zero_ether_addr(addr)) {
|
||||
spin_lock_bh(&g_cdev.lock);
|
||||
pd = g_cdev.active_pd;
|
||||
g_cdev.active_pd = 0;
|
||||
|
|
|
@ -117,13 +117,8 @@ void r8712_recv_indicatepkt(struct _adapter *padapter,
|
|||
if (skb == NULL)
|
||||
goto _recv_indicatepkt_drop;
|
||||
skb->data = precv_frame->u.hdr.rx_data;
|
||||
#ifdef NET_SKBUFF_DATA_USES_OFFSET
|
||||
skb->tail = (sk_buff_data_t)(precv_frame->u.hdr.rx_tail -
|
||||
precv_frame->u.hdr.rx_head);
|
||||
#else
|
||||
skb->tail = (sk_buff_data_t)precv_frame->u.hdr.rx_tail;
|
||||
#endif
|
||||
skb->len = precv_frame->u.hdr.len;
|
||||
skb_set_tail_pointer(skb, skb->len);
|
||||
if ((pattrib->tcpchk_valid == 1) && (pattrib->tcp_chkrpt == 1))
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
else
|
||||
|
|
|
@ -200,7 +200,7 @@ s_vProcessRxMACHeader (
|
|||
} else if (!compare_ether_addr(pbyRxBuffer, &pDevice->abySNAP_RFC1042[0])) {
|
||||
cbHeaderSize += 6;
|
||||
pwType = (PWORD) (pbyRxBufferAddr + cbHeaderSize);
|
||||
if ((*pwType == cpu_to_le16(ETH_P_IPX)) ||
|
||||
if ((*pwType == cpu_to_be16(ETH_P_IPX)) ||
|
||||
(*pwType == cpu_to_le16(0xF380))) {
|
||||
cbHeaderSize -= 8;
|
||||
pwType = (PWORD) (pbyRxBufferAddr + cbHeaderSize);
|
||||
|
|
|
@ -1699,7 +1699,7 @@ s_bPacketToWirelessUsb(
|
|||
// 802.1H
|
||||
if (ntohs(psEthHeader->wType) > ETH_DATA_LEN) {
|
||||
if (pDevice->dwDiagRefCount == 0) {
|
||||
if ((psEthHeader->wType == cpu_to_le16(ETH_P_IPX)) ||
|
||||
if ((psEthHeader->wType == cpu_to_be16(ETH_P_IPX)) ||
|
||||
(psEthHeader->wType == cpu_to_le16(0xF380))) {
|
||||
memcpy((PBYTE) (pbyPayloadHead),
|
||||
abySNAP_Bridgetunnel, 6);
|
||||
|
@ -2838,10 +2838,10 @@ int nsDMA_tx_packet(PSDevice pDevice, unsigned int uDMAIdx, struct sk_buff *skb)
|
|||
Packet_Type = skb->data[ETH_HLEN+1];
|
||||
Descriptor_type = skb->data[ETH_HLEN+1+1+2];
|
||||
Key_info = (skb->data[ETH_HLEN+1+1+2+1] << 8)|(skb->data[ETH_HLEN+1+1+2+2]);
|
||||
if (pDevice->sTxEthHeader.wType == cpu_to_le16(ETH_P_PAE)) {
|
||||
/* 802.1x OR eapol-key challenge frame transfer */
|
||||
if (((Protocol_Version == 1) || (Protocol_Version == 2)) &&
|
||||
(Packet_Type == 3)) {
|
||||
if (pDevice->sTxEthHeader.wType == cpu_to_be16(ETH_P_PAE)) {
|
||||
/* 802.1x OR eapol-key challenge frame transfer */
|
||||
if (((Protocol_Version == 1) || (Protocol_Version == 2)) &&
|
||||
(Packet_Type == 3)) {
|
||||
bTxeapol_key = TRUE;
|
||||
if(!(Key_info & BIT3) && //WPA or RSN group-key challenge
|
||||
(Key_info & BIT8) && (Key_info & BIT9)) { //send 2/2 key
|
||||
|
@ -2987,19 +2987,19 @@ int nsDMA_tx_packet(PSDevice pDevice, unsigned int uDMAIdx, struct sk_buff *skb)
|
|||
}
|
||||
}
|
||||
|
||||
if (pDevice->sTxEthHeader.wType == cpu_to_le16(ETH_P_PAE)) {
|
||||
if (pDevice->byBBType != BB_TYPE_11A) {
|
||||
pDevice->wCurrentRate = RATE_1M;
|
||||
pDevice->byACKRate = RATE_1M;
|
||||
pDevice->byTopCCKBasicRate = RATE_1M;
|
||||
pDevice->byTopOFDMBasicRate = RATE_6M;
|
||||
} else {
|
||||
pDevice->wCurrentRate = RATE_6M;
|
||||
pDevice->byACKRate = RATE_6M;
|
||||
pDevice->byTopCCKBasicRate = RATE_1M;
|
||||
pDevice->byTopOFDMBasicRate = RATE_6M;
|
||||
}
|
||||
}
|
||||
if (pDevice->sTxEthHeader.wType == cpu_to_be16(ETH_P_PAE)) {
|
||||
if (pDevice->byBBType != BB_TYPE_11A) {
|
||||
pDevice->wCurrentRate = RATE_1M;
|
||||
pDevice->byACKRate = RATE_1M;
|
||||
pDevice->byTopCCKBasicRate = RATE_1M;
|
||||
pDevice->byTopOFDMBasicRate = RATE_6M;
|
||||
} else {
|
||||
pDevice->wCurrentRate = RATE_6M;
|
||||
pDevice->byACKRate = RATE_6M;
|
||||
pDevice->byTopCCKBasicRate = RATE_1M;
|
||||
pDevice->byTopOFDMBasicRate = RATE_6M;
|
||||
}
|
||||
}
|
||||
|
||||
DBG_PRT(MSG_LEVEL_DEBUG,
|
||||
KERN_INFO "dma_tx: pDevice->wCurrentRate = %d\n",
|
||||
|
@ -3015,7 +3015,7 @@ int nsDMA_tx_packet(PSDevice pDevice, unsigned int uDMAIdx, struct sk_buff *skb)
|
|||
|
||||
if (bNeedEncryption == TRUE) {
|
||||
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ntohs Pkt Type=%04x\n", ntohs(pDevice->sTxEthHeader.wType));
|
||||
if ((pDevice->sTxEthHeader.wType) == cpu_to_le16(ETH_P_PAE)) {
|
||||
if ((pDevice->sTxEthHeader.wType) == cpu_to_be16(ETH_P_PAE)) {
|
||||
bNeedEncryption = FALSE;
|
||||
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Pkt Type=%04x\n", (pDevice->sTxEthHeader.wType));
|
||||
if ((pMgmt->eCurrMode == WMAC_MODE_ESS_STA) && (pMgmt->eCurrState == WMAC_STATE_ASSOC)) {
|
||||
|
|
|
@ -327,9 +327,9 @@ int prism2_get_station(struct wiphy *wiphy, struct net_device *dev,
|
|||
return result;
|
||||
}
|
||||
|
||||
int prism2_scan(struct wiphy *wiphy, struct net_device *dev,
|
||||
struct cfg80211_scan_request *request)
|
||||
int prism2_scan(struct wiphy *wiphy, struct cfg80211_scan_request *request)
|
||||
{
|
||||
struct net_device *dev = request->wdev->netdev;
|
||||
struct prism2_wiphy_private *priv = wiphy_priv(wiphy);
|
||||
wlandevice_t *wlandev = dev->ml_priv;
|
||||
struct p80211msg_dot11req_scan msg1;
|
||||
|
|
|
@ -1251,13 +1251,12 @@ static int zcache_pampd_get_data_and_free(char *data, size_t *bufsize, bool raw,
|
|||
void *pampd, struct tmem_pool *pool,
|
||||
struct tmem_oid *oid, uint32_t index)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
BUG_ON(!is_ephemeral(pool));
|
||||
zbud_decompress((struct page *)(data), pampd);
|
||||
if (zbud_decompress((struct page *)(data), pampd) < 0)
|
||||
return -EINVAL;
|
||||
zbud_free_and_delist((struct zbud_hdr *)pampd);
|
||||
atomic_dec(&zcache_curr_eph_pampd_count);
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue