LINUX_RELEASE?=1
LINUX_VERSION-3.18 = .43
-LINUX_VERSION-4.4 = .151
+LINUX_VERSION-4.4 = .153
LINUX_KERNEL_HASH-3.18.43 = 1236e8123a6ce537d5029232560966feed054ae31776fe8481dd7d18cdd5492c
-LINUX_KERNEL_HASH-4.4.151 = 5fea8c318626de61e99869eb6dde77e8af2419c5cf6f346280da4be1ab8089e8
+LINUX_KERNEL_HASH-4.4.153 = 0f2355515c22ca705600043bedc75218c68dcb8ab528f57f67851fbcb8545402
ifdef KERNEL_PATCHVER
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
-@@ -1978,7 +1978,8 @@ static void pcie_write_mrrs(struct pci_d
+@@ -1982,7 +1982,8 @@ static void pcie_write_mrrs(struct pci_d
/* In the "safe" case, do not configure the MRRS. There appear to be
* issues with setting MRRS to 0 on a number of devices.
*/
struct rb_root root;
struct list_head *list;
struct list_head middle;
-@@ -139,9 +139,9 @@ static int ovl_cache_entry_add_rb(struct
+@@ -140,9 +140,9 @@ static int ovl_cache_entry_add_rb(struct
return 0;
}
{
struct ovl_cache_entry *p;
-@@ -193,10 +193,10 @@ static int ovl_fill_merge(struct dir_con
+@@ -194,10 +194,10 @@ static int ovl_fill_merge(struct dir_con
container_of(ctx, struct ovl_readdir_data, ctx);
rdd->count++;
}
static int ovl_check_whiteouts(struct dentry *dir, struct ovl_readdir_data *rdd)
-@@ -289,7 +289,7 @@ static int ovl_dir_read_merged(struct de
+@@ -290,7 +290,7 @@ static int ovl_dir_read_merged(struct de
.ctx.actor = ovl_fill_merge,
.list = list,
.root = RB_ROOT,
};
int idx, next;
-@@ -306,7 +306,7 @@ static int ovl_dir_read_merged(struct de
+@@ -307,7 +307,7 @@ static int ovl_dir_read_merged(struct de
* allows offsets to be reasonably constant
*/
list_add(&rdd.middle, rdd.list);
bool is_lowest;
struct rb_root root;
struct list_head *list;
-@@ -205,17 +206,8 @@ static int ovl_check_whiteouts(struct de
+@@ -206,17 +207,8 @@ static int ovl_check_whiteouts(struct de
struct ovl_cache_entry *p;
struct dentry *dentry;
const struct cred *old_cred;
err = mutex_lock_killable(&dir->d_inode->i_mutex);
if (!err) {
-@@ -231,7 +223,6 @@ static int ovl_check_whiteouts(struct de
+@@ -232,7 +224,6 @@ static int ovl_check_whiteouts(struct de
mutex_unlock(&dir->d_inode->i_mutex);
}
revert_creds(old_cred);
return err;
}
-@@ -287,6 +278,7 @@ static int ovl_dir_read_merged(struct de
+@@ -288,6 +279,7 @@ static int ovl_dir_read_merged(struct de
struct path realpath;
struct ovl_readdir_data rdd = {
.ctx.actor = ovl_fill_merge,
kfree(ufs);
}
-@@ -1087,10 +1097,14 @@ static int ovl_fill_super(struct super_b
+@@ -1107,10 +1117,14 @@ static int ovl_fill_super(struct super_b
else
sb->s_d_op = &ovl_dentry_operations;
root_dentry = d_make_root(ovl_new_inode(sb, S_IFDIR, oe));
if (!root_dentry)
-@@ -1123,6 +1137,8 @@ static int ovl_fill_super(struct super_b
+@@ -1143,6 +1157,8 @@ static int ovl_fill_super(struct super_b
out_free_oe:
kfree(oe);
--- a/fs/overlayfs/overlayfs.h
+++ b/fs/overlayfs/overlayfs.h
-@@ -164,6 +164,8 @@ extern const struct file_operations ovl_
- int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list);
+@@ -165,6 +165,8 @@ int ovl_check_empty_dir(struct dentry *d
void ovl_cleanup_whiteouts(struct dentry *upper, struct list_head *list);
void ovl_cache_free(struct list_head *list);
+ int ovl_check_d_type_supported(struct path *realpath);
+void ovl_workdir_cleanup(struct inode *dir, struct vfsmount *mnt,
+ struct dentry *dentry, int level);
int ovl_setattr(struct dentry *dentry, struct iattr *attr);
--- a/fs/overlayfs/readdir.c
+++ b/fs/overlayfs/readdir.c
-@@ -247,7 +247,7 @@ static inline int ovl_dir_read(struct pa
+@@ -248,7 +248,7 @@ static inline int ovl_dir_read(struct pa
err = rdd->err;
} while (!err && rdd->count);
err = ovl_check_whiteouts(realpath->dentry, rdd);
fput(realfile);
-@@ -573,3 +573,64 @@ void ovl_cleanup_whiteouts(struct dentry
- }
- mutex_unlock(&upper->d_inode->i_mutex);
+@@ -610,3 +610,64 @@ int ovl_check_d_type_supported(struct pa
+
+ return rdd.d_type_supported;
}
+
+static void ovl_workdir_cleanup_recurse(struct path *path, int level)
if (!net_eq(dev_net(dev), sock_net(sk)))
goto drop;
-@@ -3137,6 +3139,7 @@ static int packet_create(struct net *net
+@@ -3139,6 +3141,7 @@ static int packet_create(struct net *net
mutex_init(&po->pg_vec_lock);
po->rollover = NULL;
po->prot_hook.func = packet_rcv;
if (sock->type == SOCK_PACKET)
po->prot_hook.func = packet_rcv_spkt;
-@@ -3795,6 +3798,16 @@ packet_setsockopt(struct socket *sock, i
+@@ -3797,6 +3800,16 @@ packet_setsockopt(struct socket *sock, i
po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
return 0;
}
default:
return -ENOPROTOOPT;
}
-@@ -3847,6 +3860,13 @@ static int packet_getsockopt(struct sock
+@@ -3849,6 +3862,13 @@ static int packet_getsockopt(struct sock
case PACKET_VNET_HDR:
val = po->has_vnet_hdr;
break;
writel(temp, &xhci->ir_set->irq_control);
/* Set the HCD state before we enable the irqs */
-@@ -1725,6 +1730,9 @@ int xhci_drop_endpoint(struct usb_hcd *h
+@@ -1730,6 +1735,9 @@ int xhci_drop_endpoint(struct usb_hcd *h
xhci_endpoint_zero(xhci, xhci->devs[udev->slot_id], ep);
xhci_dbg(xhci, "drop ep 0x%x, slot id %d, new drop flags = %#x, new add flags = %#x\n",
(unsigned int) ep->desc.bEndpointAddress,
udev->slot_id,
-@@ -1820,6 +1828,15 @@ int xhci_add_endpoint(struct usb_hcd *hc
+@@ -1825,6 +1833,15 @@ int xhci_add_endpoint(struct usb_hcd *hc
return -ENOMEM;
}
writel(temp, &xhci->ir_set->irq_control);
/* Set the HCD state before we enable the irqs */
-@@ -1725,6 +1730,9 @@ int xhci_drop_endpoint(struct usb_hcd *h
+@@ -1730,6 +1735,9 @@ int xhci_drop_endpoint(struct usb_hcd *h
xhci_endpoint_zero(xhci, xhci->devs[udev->slot_id], ep);
xhci_dbg(xhci, "drop ep 0x%x, slot id %d, new drop flags = %#x, new add flags = %#x\n",
(unsigned int) ep->desc.bEndpointAddress,
udev->slot_id,
-@@ -1820,6 +1828,15 @@ int xhci_add_endpoint(struct usb_hcd *hc
+@@ -1825,6 +1833,15 @@ int xhci_add_endpoint(struct usb_hcd *hc
return -ENOMEM;
}