2007-08-28 10:53:13

by Willy Tarreau

[permalink] [raw]
Subject: Linux 2.6.20.18

I've just released Linux 2.6.20.18. It reverts two patches that
should not have been backported and which broke the build for at
least two persons. It also contains another confirmed fix from
2.6.22 for a problem reported in 2.6.20.17 by Michal Piotrowski.

This release is intended as a cleanup of 2.6.20.17, that's why it is so
small. BTW, 2.6.22-stable seems to be calming down. I will probably
release another 2.6.20.x later if some patches are relevant, and it
may be the last one if the patch rate in 2.6.22 stays low.

I'll also be replying to this message with a copy of the patch between
2.6.20.17 and 2.6.20.18.

The patch and changelog will appear soon at the following locations:
ftp://ftp.all.kernel.org/pub/linux/kernel/v2.6/
ftp://ftp.all.kernel.org/pub/linux/kernel/v2.6/patch-2.6.20.18.bz2
ftp://ftp.all.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.20.18

Git repository:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.20.y.git
http://www.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.20.y.git

Git repository through the gitweb interface:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.20.y.git

Willy

-------

Makefile | 2 +-
drivers/ata/pata_atiixp.c | 1 -
include/net/bluetooth/rfcomm.h | 1 -
net/bluetooth/rfcomm/tty.c | 30 ++++++++----------------------
net/core/skbuff.c | 2 +-
5 files changed, 10 insertions(+), 26 deletions(-)

Summary of changes from 2.6.20.17 to 2.6.20.18
============================================

Patrick McHardy (1):
Fix incorrect config #ifdef around skb_copy_secmark

Willy Tarreau (3):
Revert "Keep rfcomm_dev on the list until it is freed"
Revert "pata_atiixp: add SB700 PCI ID"
Linux 2.6.20.18


2007-08-28 10:53:33

by Willy Tarreau

[permalink] [raw]
Subject: Re: Linux 2.6.20.18

diff --git a/Makefile b/Makefile
index bce2fbf..48daec7 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 20
-EXTRAVERSION = .17
+EXTRAVERSION = .18
NAME = Homicidal Dwarf Hamster

# *DOCUMENTATION*
diff --git a/drivers/ata/pata_atiixp.c b/drivers/ata/pata_atiixp.c
index 17d75ec..b50ebb6 100644
--- a/drivers/ata/pata_atiixp.c
+++ b/drivers/ata/pata_atiixp.c
@@ -283,7 +283,6 @@ static const struct pci_device_id atiixp[] = {
{ PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP300_IDE), },
{ PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP400_IDE), },
{ PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP600_IDE), },
- { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP700_IDE), },

{ },
};
diff --git a/include/net/bluetooth/rfcomm.h b/include/net/bluetooth/rfcomm.h
index 25aa575..3c563f0 100644
--- a/include/net/bluetooth/rfcomm.h
+++ b/include/net/bluetooth/rfcomm.h
@@ -323,7 +323,6 @@ int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc
#define RFCOMM_RELEASE_ONHUP 1
#define RFCOMM_HANGUP_NOW 2
#define RFCOMM_TTY_ATTACHED 3
-#define RFCOMM_TTY_RELEASED 4

struct rfcomm_dev_req {
s16 dev_id;
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c
index 26e8c02..e1b8663 100644
--- a/net/bluetooth/rfcomm/tty.c
+++ b/net/bluetooth/rfcomm/tty.c
@@ -93,10 +93,6 @@ static void rfcomm_dev_destruct(struct rfcomm_dev *dev)

BT_DBG("dev %p dlc %p", dev, dlc);

- write_lock_bh(&rfcomm_dev_lock);
- list_del_init(&dev->list);
- write_unlock_bh(&rfcomm_dev_lock);
-
rfcomm_dlc_lock(dlc);
/* Detach DLC if it's owned by this dev */
if (dlc->owner == dev)
@@ -158,13 +154,8 @@ static inline struct rfcomm_dev *rfcomm_dev_get(int id)
read_lock(&rfcomm_dev_lock);

dev = __rfcomm_dev_get(id);
-
- if (dev) {
- if (test_bit(RFCOMM_TTY_RELEASED, &dev->flags))
- dev = NULL;
- else
- rfcomm_dev_hold(dev);
- }
+ if (dev)
+ rfcomm_dev_hold(dev);

read_unlock(&rfcomm_dev_lock);

@@ -272,12 +263,6 @@ out:

tty_register_device(rfcomm_tty_driver, dev->id, rfcomm_get_device(dev));

- if (IS_ERR(dev->tty_dev)) {
- list_del(&dev->list);
- kfree(dev);
- return PTR_ERR(dev->tty_dev);
- }
-
return dev->id;
}

@@ -285,7 +270,10 @@ static void rfcomm_dev_del(struct rfcomm_dev *dev)
{
BT_DBG("dev %p", dev);

- set_bit(RFCOMM_TTY_RELEASED, &dev->flags);
+ write_lock_bh(&rfcomm_dev_lock);
+ list_del_init(&dev->list);
+ write_unlock_bh(&rfcomm_dev_lock);
+
rfcomm_dev_put(dev);
}

@@ -339,7 +327,7 @@ static int rfcomm_create_dev(struct sock *sk, void __user *arg)
if (copy_from_user(&req, arg, sizeof(req)))
return -EFAULT;

- BT_DBG("sk %p dev_id %d flags 0x%x", sk, req.dev_id, req.flags);
+ BT_DBG("sk %p dev_id %id flags 0x%x", sk, req.dev_id, req.flags);

if (req.flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN))
return -EPERM;
@@ -380,7 +368,7 @@ static int rfcomm_release_dev(void __user *arg)
if (copy_from_user(&req, arg, sizeof(req)))
return -EFAULT;

- BT_DBG("dev_id %d flags 0x%x", req.dev_id, req.flags);
+ BT_DBG("dev_id %id flags 0x%x", req.dev_id, req.flags);

if (!(dev = rfcomm_dev_get(req.dev_id)))
return -ENODEV;
@@ -429,8 +417,6 @@ static int rfcomm_get_dev_list(void __user *arg)

list_for_each(p, &rfcomm_dev_list) {
struct rfcomm_dev *dev = list_entry(p, struct rfcomm_dev, list);
- if (test_bit(RFCOMM_TTY_RELEASED, &dev->flags))
- continue;
(di + n)->id = dev->id;
(di + n)->flags = dev->flags;
(di + n)->state = dev->dlc->state;
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index ba94969..915ea28 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -499,8 +499,8 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
n->tc_verd = CLR_TC_MUNGED(n->tc_verd);
C(iif);
#endif
- skb_copy_secmark(n, skb);
#endif
+ skb_copy_secmark(n, skb);
C(truesize);
atomic_set(&n->users, 1);
C(head);