Merge branch 'linux-3.0.y' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroid-3.0.y
This commit is contained in:
commit
aa0ad92872
18 changed files with 122 additions and 46 deletions
|
|
@ -5725,6 +5725,7 @@ P: Vincent Sanders <vince@simtec.co.uk>
|
|||
M: Simtec Linux Team <linux@simtec.co.uk>
|
||||
W: http://www.simtec.co.uk/products/EB110ATX/
|
||||
S: Supported
|
||||
F: Documentation/stable_kernel_rules.txt
|
||||
|
||||
SIMTEC EB2410ITX (BAST)
|
||||
P: Ben Dooks
|
||||
|
|
|
|||
2
Makefile
2
Makefile
|
|
@ -1,6 +1,6 @@
|
|||
VERSION = 3
|
||||
PATCHLEVEL = 0
|
||||
SUBLEVEL = 84
|
||||
SUBLEVEL = 86
|
||||
EXTRAVERSION =
|
||||
NAME = Sneaky Weasel
|
||||
|
||||
|
|
|
|||
|
|
@ -518,7 +518,7 @@ void register_disk(struct gendisk *disk)
|
|||
|
||||
ddev->parent = disk->driverfs_dev;
|
||||
|
||||
dev_set_name(ddev, disk->disk_name);
|
||||
dev_set_name(ddev, "%s", disk->disk_name);
|
||||
|
||||
/* delay uevents, until we scanned partition table */
|
||||
dev_set_uevent_suppress(ddev, 1);
|
||||
|
|
|
|||
|
|
@ -478,7 +478,8 @@ static struct crypto_template *__crypto_lookup_template(const char *name)
|
|||
|
||||
struct crypto_template *crypto_lookup_template(const char *name)
|
||||
{
|
||||
return try_then_request_module(__crypto_lookup_template(name), name);
|
||||
return try_then_request_module(__crypto_lookup_template(name), "%s",
|
||||
name);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(crypto_lookup_template);
|
||||
|
||||
|
|
|
|||
|
|
@ -658,7 +658,8 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *lo,
|
|||
|
||||
mutex_unlock(&lo->tx_lock);
|
||||
|
||||
thread = kthread_create(nbd_thread, lo, lo->disk->disk_name);
|
||||
thread = kthread_create(nbd_thread, lo, "%s",
|
||||
lo->disk->disk_name);
|
||||
if (IS_ERR(thread)) {
|
||||
mutex_lock(&lo->tx_lock);
|
||||
return PTR_ERR(thread);
|
||||
|
|
|
|||
|
|
@ -2879,7 +2879,7 @@ static noinline int mmc_ioctl_cdrom_read_data(struct cdrom_device_info *cdi,
|
|||
if (lba < 0)
|
||||
return -EINVAL;
|
||||
|
||||
cgc->buffer = kmalloc(blocksize, GFP_KERNEL);
|
||||
cgc->buffer = kzalloc(blocksize, GFP_KERNEL);
|
||||
if (cgc->buffer == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -377,21 +377,37 @@ static int dlci_del(struct dlci_add *dlci)
|
|||
struct frad_local *flp;
|
||||
struct net_device *master, *slave;
|
||||
int err;
|
||||
bool found = false;
|
||||
|
||||
rtnl_lock();
|
||||
|
||||
/* validate slave device */
|
||||
master = __dev_get_by_name(&init_net, dlci->devname);
|
||||
if (!master)
|
||||
return -ENODEV;
|
||||
if (!master) {
|
||||
err = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
|
||||
list_for_each_entry(dlp, &dlci_devs, list) {
|
||||
if (dlp->master == master) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
err = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (netif_running(master)) {
|
||||
return -EBUSY;
|
||||
err = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
dlp = netdev_priv(master);
|
||||
slave = dlp->slave;
|
||||
flp = netdev_priv(slave);
|
||||
|
||||
rtnl_lock();
|
||||
err = (*flp->deassoc)(slave, master);
|
||||
if (!err) {
|
||||
list_del(&dlp->list);
|
||||
|
|
@ -400,8 +416,8 @@ static int dlci_del(struct dlci_add *dlci)
|
|||
|
||||
dev_put(slave);
|
||||
}
|
||||
out:
|
||||
rtnl_unlock();
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -465,7 +465,7 @@ static int osd_probe(struct device *dev)
|
|||
oud->class_dev.class = &osd_uld_class;
|
||||
oud->class_dev.parent = dev;
|
||||
oud->class_dev.release = __remove;
|
||||
error = dev_set_name(&oud->class_dev, disk->disk_name);
|
||||
error = dev_set_name(&oud->class_dev, "%s", disk->disk_name);
|
||||
if (error) {
|
||||
OSD_ERR("dev_set_name failed => %d\n", error);
|
||||
goto err_put_cdev;
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ sd_store_cache_type(struct device *dev, struct device_attribute *attr,
|
|||
char *buffer_data;
|
||||
struct scsi_mode_data data;
|
||||
struct scsi_sense_hdr sshdr;
|
||||
const char *temp = "temporary ";
|
||||
static const char temp[] = "temporary ";
|
||||
int len;
|
||||
|
||||
if (sdp->type != TYPE_DISK)
|
||||
|
|
|
|||
|
|
@ -935,22 +935,37 @@ static unsigned int dma_handle_tx(struct eg20t_port *priv)
|
|||
static void pch_uart_err_ir(struct eg20t_port *priv, unsigned int lsr)
|
||||
{
|
||||
u8 fcr = ioread8(priv->membase + UART_FCR);
|
||||
struct uart_port *port = &priv->port;
|
||||
struct tty_struct *tty = tty_port_tty_get(&port->state->port);
|
||||
char *error_msg[5] = {};
|
||||
int i = 0;
|
||||
|
||||
/* Reset FIFO */
|
||||
fcr |= UART_FCR_CLEAR_RCVR;
|
||||
iowrite8(fcr, priv->membase + UART_FCR);
|
||||
|
||||
if (lsr & PCH_UART_LSR_ERR)
|
||||
dev_err(&priv->pdev->dev, "Error data in FIFO\n");
|
||||
error_msg[i++] = "Error data in FIFO\n";
|
||||
|
||||
if (lsr & UART_LSR_FE)
|
||||
dev_err(&priv->pdev->dev, "Framing Error\n");
|
||||
if (lsr & UART_LSR_FE) {
|
||||
port->icount.frame++;
|
||||
error_msg[i++] = " Framing Error\n";
|
||||
}
|
||||
|
||||
if (lsr & UART_LSR_PE)
|
||||
dev_err(&priv->pdev->dev, "Parity Error\n");
|
||||
if (lsr & UART_LSR_PE) {
|
||||
port->icount.parity++;
|
||||
error_msg[i++] = " Parity Error\n";
|
||||
}
|
||||
|
||||
if (lsr & UART_LSR_OE)
|
||||
dev_err(&priv->pdev->dev, "Overrun Error\n");
|
||||
if (lsr & UART_LSR_OE) {
|
||||
port->icount.overrun++;
|
||||
error_msg[i++] = " Overrun Error\n";
|
||||
}
|
||||
|
||||
if (tty == NULL) {
|
||||
for (i = 0; error_msg[i] != NULL; i++)
|
||||
dev_err(&priv->pdev->dev, error_msg[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static irqreturn_t pch_uart_interrupt(int irq, void *dev_id)
|
||||
|
|
|
|||
16
fs/exec.c
16
fs/exec.c
|
|
@ -1149,13 +1149,6 @@ void setup_new_exec(struct linux_binprm * bprm)
|
|||
set_dumpable(current->mm, suid_dumpable);
|
||||
}
|
||||
|
||||
/*
|
||||
* Flush performance counters when crossing a
|
||||
* security domain:
|
||||
*/
|
||||
if (!get_dumpable(current->mm))
|
||||
perf_event_exit_task(current);
|
||||
|
||||
/* An exec changes our domain. We are no longer part of the thread
|
||||
group */
|
||||
|
||||
|
|
@ -1219,6 +1212,15 @@ void install_exec_creds(struct linux_binprm *bprm)
|
|||
|
||||
commit_creds(bprm->cred);
|
||||
bprm->cred = NULL;
|
||||
|
||||
/*
|
||||
* Disable monitoring for regular users
|
||||
* when executing setuid binaries. Must
|
||||
* wait until new credentials are committed
|
||||
* by commit_creds() above
|
||||
*/
|
||||
if (get_dumpable(current->mm) != SUID_DUMP_USER)
|
||||
perf_event_exit_task(current);
|
||||
/*
|
||||
* cred_guard_mutex must be held at least to this point to prevent
|
||||
* ptrace_attach() from altering our determination of the task's
|
||||
|
|
|
|||
|
|
@ -17,7 +17,8 @@ unsigned int *hpfs_map_bitmap(struct super_block *s, unsigned bmp_block,
|
|||
struct quad_buffer_head *qbh, char *id)
|
||||
{
|
||||
secno sec;
|
||||
if (hpfs_sb(s)->sb_chk) if (bmp_block * 16384 > hpfs_sb(s)->sb_fs_size) {
|
||||
unsigned n_bands = (hpfs_sb(s)->sb_fs_size + 0x3fff) >> 14;
|
||||
if (hpfs_sb(s)->sb_chk) if (bmp_block >= n_bands) {
|
||||
hpfs_error(s, "hpfs_map_bitmap called with bad parameter: %08x at %s", bmp_block, id);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -553,7 +553,13 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent)
|
|||
sbi->sb_cp_table = NULL;
|
||||
sbi->sb_c_bitmap = -1;
|
||||
sbi->sb_max_fwd_alloc = 0xffffff;
|
||||
|
||||
|
||||
if (sbi->sb_fs_size >= 0x80000000) {
|
||||
hpfs_error(s, "invalid size in superblock: %08x",
|
||||
(unsigned)sbi->sb_fs_size);
|
||||
goto bail4;
|
||||
}
|
||||
|
||||
/* Load bitmap directory */
|
||||
if (!(sbi->sb_bmp_dir = hpfs_load_bitmap_directory(s, le32_to_cpu(superblock->bitmaps))))
|
||||
goto bail4;
|
||||
|
|
|
|||
|
|
@ -159,8 +159,8 @@ static __be32 *read_buf(struct nfsd4_compoundargs *argp, u32 nbytes)
|
|||
*/
|
||||
memcpy(p, argp->p, avail);
|
||||
/* step to next page */
|
||||
argp->p = page_address(argp->pagelist[0]);
|
||||
argp->pagelist++;
|
||||
argp->p = page_address(argp->pagelist[0]);
|
||||
if (argp->pagelen < PAGE_SIZE) {
|
||||
argp->end = argp->p + (argp->pagelen>>2);
|
||||
argp->pagelen = 0;
|
||||
|
|
|
|||
|
|
@ -355,31 +355,50 @@ static unsigned int vfs_dent_type(uint8_t type)
|
|||
static int ubifs_readdir(struct file *file, void *dirent, filldir_t filldir)
|
||||
{
|
||||
int err, over = 0;
|
||||
loff_t pos = file->f_pos;
|
||||
struct qstr nm;
|
||||
union ubifs_key key;
|
||||
struct ubifs_dent_node *dent;
|
||||
struct inode *dir = file->f_path.dentry->d_inode;
|
||||
struct ubifs_info *c = dir->i_sb->s_fs_info;
|
||||
|
||||
dbg_gen("dir ino %lu, f_pos %#llx", dir->i_ino, file->f_pos);
|
||||
dbg_gen("dir ino %lu, f_pos %#llx", dir->i_ino, pos);
|
||||
|
||||
if (file->f_pos > UBIFS_S_KEY_HASH_MASK || file->f_pos == 2)
|
||||
if (pos > UBIFS_S_KEY_HASH_MASK || pos == 2)
|
||||
/*
|
||||
* The directory was seek'ed to a senseless position or there
|
||||
* are no more entries.
|
||||
*/
|
||||
return 0;
|
||||
|
||||
if (file->f_version == 0) {
|
||||
/*
|
||||
* The file was seek'ed, which means that @file->private_data
|
||||
* is now invalid. This may also be just the first
|
||||
* 'ubifs_readdir()' invocation, in which case
|
||||
* @file->private_data is NULL, and the below code is
|
||||
* basically a no-op.
|
||||
*/
|
||||
kfree(file->private_data);
|
||||
file->private_data = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* 'generic_file_llseek()' unconditionally sets @file->f_version to
|
||||
* zero, and we use this for detecting whether the file was seek'ed.
|
||||
*/
|
||||
file->f_version = 1;
|
||||
|
||||
/* File positions 0 and 1 correspond to "." and ".." */
|
||||
if (file->f_pos == 0) {
|
||||
if (pos == 0) {
|
||||
ubifs_assert(!file->private_data);
|
||||
over = filldir(dirent, ".", 1, 0, dir->i_ino, DT_DIR);
|
||||
if (over)
|
||||
return 0;
|
||||
file->f_pos = 1;
|
||||
file->f_pos = pos = 1;
|
||||
}
|
||||
|
||||
if (file->f_pos == 1) {
|
||||
if (pos == 1) {
|
||||
ubifs_assert(!file->private_data);
|
||||
over = filldir(dirent, "..", 2, 1,
|
||||
parent_ino(file->f_path.dentry), DT_DIR);
|
||||
|
|
@ -395,7 +414,7 @@ static int ubifs_readdir(struct file *file, void *dirent, filldir_t filldir)
|
|||
goto out;
|
||||
}
|
||||
|
||||
file->f_pos = key_hash_flash(c, &dent->key);
|
||||
file->f_pos = pos = key_hash_flash(c, &dent->key);
|
||||
file->private_data = dent;
|
||||
}
|
||||
|
||||
|
|
@ -403,17 +422,16 @@ static int ubifs_readdir(struct file *file, void *dirent, filldir_t filldir)
|
|||
if (!dent) {
|
||||
/*
|
||||
* The directory was seek'ed to and is now readdir'ed.
|
||||
* Find the entry corresponding to @file->f_pos or the
|
||||
* closest one.
|
||||
* Find the entry corresponding to @pos or the closest one.
|
||||
*/
|
||||
dent_key_init_hash(c, &key, dir->i_ino, file->f_pos);
|
||||
dent_key_init_hash(c, &key, dir->i_ino, pos);
|
||||
nm.name = NULL;
|
||||
dent = ubifs_tnc_next_ent(c, &key, &nm);
|
||||
if (IS_ERR(dent)) {
|
||||
err = PTR_ERR(dent);
|
||||
goto out;
|
||||
}
|
||||
file->f_pos = key_hash_flash(c, &dent->key);
|
||||
file->f_pos = pos = key_hash_flash(c, &dent->key);
|
||||
file->private_data = dent;
|
||||
}
|
||||
|
||||
|
|
@ -425,7 +443,7 @@ static int ubifs_readdir(struct file *file, void *dirent, filldir_t filldir)
|
|||
ubifs_inode(dir)->creat_sqnum);
|
||||
|
||||
nm.len = le16_to_cpu(dent->nlen);
|
||||
over = filldir(dirent, dent->name, nm.len, file->f_pos,
|
||||
over = filldir(dirent, dent->name, nm.len, pos,
|
||||
le64_to_cpu(dent->inum),
|
||||
vfs_dent_type(dent->type));
|
||||
if (over)
|
||||
|
|
@ -441,9 +459,17 @@ static int ubifs_readdir(struct file *file, void *dirent, filldir_t filldir)
|
|||
}
|
||||
|
||||
kfree(file->private_data);
|
||||
file->f_pos = key_hash_flash(c, &dent->key);
|
||||
file->f_pos = pos = key_hash_flash(c, &dent->key);
|
||||
file->private_data = dent;
|
||||
cond_resched();
|
||||
|
||||
if (file->f_version == 0)
|
||||
/*
|
||||
* The file was seek'ed meanwhile, lets return and start
|
||||
* reading direntries from the new position on the next
|
||||
* invocation.
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
out:
|
||||
|
|
@ -454,15 +480,13 @@ out:
|
|||
|
||||
kfree(file->private_data);
|
||||
file->private_data = NULL;
|
||||
/* 2 is a special value indicating that there are no more direntries */
|
||||
file->f_pos = 2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* If a directory is seeked, we have to free saved readdir() state */
|
||||
static loff_t ubifs_dir_llseek(struct file *file, loff_t offset, int origin)
|
||||
{
|
||||
kfree(file->private_data);
|
||||
file->private_data = NULL;
|
||||
return generic_file_llseek(file, offset, origin);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -147,7 +147,7 @@ fetch_bp_busy_slots(struct bp_busy_slots *slots, struct perf_event *bp,
|
|||
return;
|
||||
}
|
||||
|
||||
for_each_online_cpu(cpu) {
|
||||
for_each_possible_cpu(cpu) {
|
||||
unsigned int nr;
|
||||
|
||||
nr = per_cpu(nr_cpu_bp_pinned[type], cpu);
|
||||
|
|
@ -233,7 +233,7 @@ toggle_bp_slot(struct perf_event *bp, bool enable, enum bp_type_idx type,
|
|||
if (cpu >= 0) {
|
||||
toggle_bp_task_slot(bp, cpu, enable, type, weight);
|
||||
} else {
|
||||
for_each_online_cpu(cpu)
|
||||
for_each_possible_cpu(cpu)
|
||||
toggle_bp_task_slot(bp, cpu, enable, type, weight);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1728,6 +1728,9 @@ static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
|
|||
BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
|
||||
conn, code, ident, dlen);
|
||||
|
||||
if (conn->mtu < L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE)
|
||||
return NULL;
|
||||
|
||||
len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
|
||||
count = min_t(unsigned int, conn->mtu, len);
|
||||
|
||||
|
|
|
|||
|
|
@ -39,6 +39,11 @@ static int should_authenticate(struct ceph_auth_client *ac)
|
|||
return xi->starting;
|
||||
}
|
||||
|
||||
static int build_request(struct ceph_auth_client *ac, void *buf, void *end)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* the generic auth code decode the global_id, and we carry no actual
|
||||
* authenticate state, so nothing happens here.
|
||||
|
|
@ -107,6 +112,7 @@ static const struct ceph_auth_client_ops ceph_auth_none_ops = {
|
|||
.destroy = destroy,
|
||||
.is_authenticated = is_authenticated,
|
||||
.should_authenticate = should_authenticate,
|
||||
.build_request = build_request,
|
||||
.handle_reply = handle_reply,
|
||||
.create_authorizer = ceph_auth_none_create_authorizer,
|
||||
.destroy_authorizer = ceph_auth_none_destroy_authorizer,
|
||||
|
|
|
|||
Loading…
Reference in a new issue