Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
dbd4e27f
Commit
dbd4e27f
authored
Nov 04, 2003
by
Steve French
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://linux.bkbits.net/linux-2.5
into hostme.bitkeeper.com:/repos/c/cifs/linux-2.5cifs
parents
f87c615d
4154cebf
Changes
19
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
211 additions
and
195 deletions
+211
-195
MAINTAINERS
MAINTAINERS
+2
-3
arch/i386/kernel/vm86.c
arch/i386/kernel/vm86.c
+7
-0
arch/i386/mm/ioremap.c
arch/i386/mm/ioremap.c
+16
-5
arch/ia64/mm/tlb.c
arch/ia64/mm/tlb.c
+1
-1
arch/ia64/sn/io/machvec/pci_dma.c
arch/ia64/sn/io/machvec/pci_dma.c
+1
-2
drivers/block/ll_rw_blk.c
drivers/block/ll_rw_blk.c
+5
-0
drivers/char/agp/sis-agp.c
drivers/char/agp/sis-agp.c
+12
-0
drivers/ide/ide-tape.c
drivers/ide/ide-tape.c
+87
-119
drivers/net/Space.c
drivers/net/Space.c
+5
-1
drivers/pci/setup-res.c
drivers/pci/setup-res.c
+1
-1
drivers/pnp/isapnp/core.c
drivers/pnp/isapnp/core.c
+1
-1
fs/minix/inode.c
fs/minix/inode.c
+2
-0
include/linux/blkdev.h
include/linux/blkdev.h
+10
-0
include/linux/netdevice.h
include/linux/netdevice.h
+0
-1
include/linux/pci_ids.h
include/linux/pci_ids.h
+3
-0
net/core/dev.c
net/core/dev.c
+1
-3
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_ipv4.c
+1
-1
net/llc/af_llc.c
net/llc/af_llc.c
+56
-55
net/llc/llc_proc.c
net/llc/llc_proc.c
+0
-2
No files found.
MAINTAINERS
View file @
dbd4e27f
...
...
@@ -234,9 +234,8 @@ W: http://www.canb.auug.org.au/~sfr/
S: Supported
APPLETALK NETWORK LAYER
P: Jay Schulist
M: jschlst@samba.org
L: linux-atalk@lists.netspace.org
P: Arnaldo Carvalho de Melo
M: acme@conectiva.com.br
S: Maintained
ARM26 ARCHITECTURE
...
...
arch/i386/kernel/vm86.c
View file @
dbd4e27f
...
...
@@ -101,6 +101,13 @@ struct pt_regs * save_v86_state(struct kernel_vm86_regs * regs)
struct
pt_regs
*
ret
;
unsigned
long
tmp
;
/*
* This gets called from entry.S with interrupts disabled, but
* from process context. Enable interrupts here, before trying
* to access user space.
*/
local_irq_enable
();
if
(
!
current
->
thread
.
vm86_info
)
{
printk
(
"no vm86_info: BAD
\n
"
);
do_exit
(
SIGSEGV
);
...
...
arch/i386/mm/ioremap.c
View file @
dbd4e27f
...
...
@@ -190,23 +190,34 @@ void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flag
void
*
ioremap_nocache
(
unsigned
long
phys_addr
,
unsigned
long
size
)
{
unsigned
long
last_addr
;
void
*
p
=
__ioremap
(
phys_addr
,
size
,
_PAGE_PCD
);
if
(
!
p
)
return
p
;
if
(
phys_addr
+
size
<
virt_to_phys
(
high_memory
))
{
/* Guaranteed to be > phys_addr, as per __ioremap() */
last_addr
=
phys_addr
+
size
-
1
;
if
(
last_addr
<
virt_to_phys
(
high_memory
))
{
struct
page
*
ppage
=
virt_to_page
(
__va
(
phys_addr
));
unsigned
long
npages
=
(
size
+
PAGE_SIZE
-
1
)
>>
PAGE_SHIFT
;
unsigned
long
npages
;
phys_addr
&=
PAGE_MASK
;
BUG_ON
(
phys_addr
+
size
>
(
unsigned
long
)
high_memory
);
BUG_ON
(
phys_addr
+
size
<
phys_addr
);
/* This might overflow and become zero.. */
last_addr
=
PAGE_ALIGN
(
last_addr
);
/* .. but that's ok, because modulo-2**n arithmetic will make
* the page-aligned "last - first" come out right.
*/
npages
=
(
last_addr
-
phys_addr
)
>>
PAGE_SHIFT
;
if
(
change_page_attr
(
ppage
,
npages
,
PAGE_KERNEL_NOCACHE
)
<
0
)
{
iounmap
(
p
);
p
=
NULL
;
}
global_flush_tlb
();
}
}
return
p
;
}
...
...
arch/ia64/mm/tlb.c
View file @
dbd4e27f
...
...
@@ -77,7 +77,7 @@ wrap_mmu_context (struct mm_struct *mm)
{
int
cpu
=
get_cpu
();
/* prevent preemption/migration */
for
(
i
=
0
;
i
<
NR_CPUS
;
++
i
)
if
(
i
!=
cpu
)
if
(
cpu_online
(
i
)
&&
(
i
!=
cpu
)
)
per_cpu
(
ia64_need_tlb_flush
,
i
)
=
1
;
put_cpu
();
}
...
...
arch/ia64/sn/io/machvec/pci_dma.c
View file @
dbd4e27f
...
...
@@ -279,8 +279,7 @@ sn_pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, int nents, int dire
* scatterlist.
*/
for
(
i
=
0
;
i
<
nents
;
i
++
,
sg
++
)
{
phys_addr
=
__pa
(
sg
->
dma_address
?
sg
->
dma_address
:
(
unsigned
long
)
page_address
(
sg
->
page
)
+
sg
->
offset
);
phys_addr
=
__pa
((
unsigned
long
)
page_address
(
sg
->
page
)
+
sg
->
offset
);
/*
* Handle the most common case: 64 bit cards. This
...
...
drivers/block/ll_rw_blk.c
View file @
dbd4e27f
...
...
@@ -780,6 +780,11 @@ static char *rq_flags[] = {
"REQ_PM_SUSPEND"
,
"REQ_PM_RESUME"
,
"REQ_PM_SHUTDOWN"
,
"REQ_IDETAPE_PC1"
,
"REQ_IDETAPE_PC2"
,
"REQ_IDETAPE_READ"
,
"REQ_IDETAPE_WRITE"
,
"REQ_IDETAPE_READ_BUFFER"
,
};
void
blk_dump_rq_flags
(
struct
request
*
rq
,
char
*
msg
)
...
...
drivers/char/agp/sis-agp.c
View file @
dbd4e27f
...
...
@@ -141,6 +141,10 @@ static struct agp_device_ids sis_agp_device_ids[] __devinitdata =
.
device_id
=
PCI_DEVICE_ID_SI_655
,
.
chipset_name
=
"655"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_661
,
.
chipset_name
=
"661"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_730
,
.
chipset_name
=
"730"
,
...
...
@@ -153,6 +157,10 @@ static struct agp_device_ids sis_agp_device_ids[] __devinitdata =
.
device_id
=
PCI_DEVICE_ID_SI_740
,
.
chipset_name
=
"740"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_741
,
.
chipset_name
=
"741"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_745
,
.
chipset_name
=
"745"
,
...
...
@@ -161,6 +169,10 @@ static struct agp_device_ids sis_agp_device_ids[] __devinitdata =
.
device_id
=
PCI_DEVICE_ID_SI_746
,
.
chipset_name
=
"746"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_760
,
.
chipset_name
=
"760"
,
},
{
},
/* dummy final entry, always present */
};
...
...
drivers/ide/ide-tape.c
View file @
dbd4e27f
This diff is collapsed.
Click to expand it.
drivers/net/Space.c
View file @
dbd4e27f
...
...
@@ -422,7 +422,7 @@ static __init int trif_probe(int unit)
extern
int
loopback_init
(
void
);
/* Statically configured drivers -- order matters here. */
void
__init
probe_old_netdevs
(
void
)
static
int
__init
net_olddevs_init
(
void
)
{
int
num
;
...
...
@@ -450,8 +450,12 @@ void __init probe_old_netdevs(void)
#ifdef CONFIG_LTPC
ltpc_probe
();
#endif
return
0
;
}
device_initcall
(
net_olddevs_init
);
/*
* The @dev_base list is protected by @dev_base_lock and the rtln
* semaphore.
...
...
drivers/pci/setup-res.c
View file @
dbd4e27f
...
...
@@ -45,7 +45,7 @@ pci_update_resource(struct pci_dev *dev, struct resource *res, int resno)
DBGC
((
KERN_ERR
" got res [%lx:%lx] bus [%lx:%lx] flags %lx for "
"BAR %d of %s
\n
"
,
res
->
start
,
res
->
end
,
region
.
start
,
region
.
end
,
res
->
flags
,
resno
,
dev
->
dev
.
name
));
resno
,
pci_name
(
dev
)
));
new
=
region
.
start
|
(
res
->
flags
&
PCI_REGION_FLAG_MASK
);
if
(
res
->
flags
&
IORESOURCE_IO
)
...
...
drivers/pnp/isapnp/core.c
View file @
dbd4e27f
...
...
@@ -1160,7 +1160,7 @@ int __init isapnp_init(void)
return
0
;
}
fs
_initcall
(
isapnp_init
);
device
_initcall
(
isapnp_init
);
/* format is: noisapnp */
...
...
fs/minix/inode.c
View file @
dbd4e27f
...
...
@@ -547,6 +547,8 @@ int minix_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *sta
*/
void
minix_truncate
(
struct
inode
*
inode
)
{
if
(
!
(
S_ISREG
(
inode
->
i_mode
)
||
S_ISDIR
(
inode
->
i_mode
)
||
S_ISLNK
(
inode
->
i_mode
)))
return
;
if
(
INODE_VERSION
(
inode
)
==
MINIX_V1
)
V1_minix_truncate
(
inode
);
else
...
...
include/linux/blkdev.h
View file @
dbd4e27f
...
...
@@ -193,6 +193,11 @@ enum rq_flag_bits {
__REQ_PM_SUSPEND
,
/* suspend request */
__REQ_PM_RESUME
,
/* resume request */
__REQ_PM_SHUTDOWN
,
/* shutdown request */
__REQ_IDETAPE_PC1
,
/* packet command (first stage) */
__REQ_IDETAPE_PC2
,
/* packet command (second stage) */
__REQ_IDETAPE_READ
,
__REQ_IDETAPE_WRITE
,
__REQ_IDETAPE_READ_BUFFER
,
__REQ_NR_BITS
,
/* stops here */
};
...
...
@@ -218,6 +223,11 @@ enum rq_flag_bits {
#define REQ_PM_SUSPEND (1 << __REQ_PM_SUSPEND)
#define REQ_PM_RESUME (1 << __REQ_PM_RESUME)
#define REQ_PM_SHUTDOWN (1 << __REQ_PM_SHUTDOWN)
#define REQ_IDETAPE_PC1 (1 << __REQ_IDETAPE_PC1)
#define REQ_IDETAPE_PC2 (1 << __REQ_IDETAPE_PC2)
#define REQ_IDETAPE_READ (1 << __REQ_IDETAPE_READ)
#define REQ_IDETAPE_WRITE (1 << __REQ_IDETAPE_WRITE)
#define REQ_IDETAPE_READ_BUFFER (1 << __REQ_IDETAPE_READ_BUFFER)
/*
* State information carried for REQ_PM_SUSPEND and REQ_PM_RESUME
...
...
include/linux/netdevice.h
View file @
dbd4e27f
...
...
@@ -494,7 +494,6 @@ extern struct net_device loopback_dev; /* The loopback */
extern
struct
net_device
*
dev_base
;
/* All devices */
extern
rwlock_t
dev_base_lock
;
/* Device list lock */
extern
void
probe_old_netdevs
(
void
);
extern
int
netdev_boot_setup_add
(
char
*
name
,
struct
ifmap
*
map
);
extern
int
netdev_boot_setup_check
(
struct
net_device
*
dev
);
extern
struct
net_device
*
dev_getbyhwaddr
(
unsigned
short
type
,
char
*
hwaddr
);
...
...
include/linux/pci_ids.h
View file @
dbd4e27f
...
...
@@ -582,12 +582,14 @@
#define PCI_DEVICE_ID_SI_651 0x0651
#define PCI_DEVICE_ID_SI_652 0x0652
#define PCI_DEVICE_ID_SI_655 0x0655
#define PCI_DEVICE_ID_SI_661 0x0661
#define PCI_DEVICE_ID_SI_730 0x0730
#define PCI_DEVICE_ID_SI_733 0x0733
#define PCI_DEVICE_ID_SI_630_VGA 0x6300
#define PCI_DEVICE_ID_SI_730_VGA 0x7300
#define PCI_DEVICE_ID_SI_735 0x0735
#define PCI_DEVICE_ID_SI_740 0x0740
#define PCI_DEVICE_ID_SI_741 0x0741
#define PCI_DEVICE_ID_SI_745 0x0745
#define PCI_DEVICE_ID_SI_746 0x0746
#define PCI_DEVICE_ID_SI_748 0x0748
...
...
@@ -595,6 +597,7 @@
#define PCI_DEVICE_ID_SI_751 0x0751
#define PCI_DEVICE_ID_SI_752 0x0752
#define PCI_DEVICE_ID_SI_755 0x0755
#define PCI_DEVICE_ID_SI_760 0x0760
#define PCI_DEVICE_ID_SI_900 0x0900
#define PCI_DEVICE_ID_SI_961 0x0961
#define PCI_DEVICE_ID_SI_962 0x0962
...
...
net/core/dev.c
View file @
dbd4e27f
...
...
@@ -3033,8 +3033,6 @@ static int __init net_dev_init(void)
dev_boot_phase
=
0
;
probe_old_netdevs
();
open_softirq
(
NET_TX_SOFTIRQ
,
net_tx_action
,
NULL
);
open_softirq
(
NET_RX_SOFTIRQ
,
net_rx_action
,
NULL
);
...
...
@@ -3049,7 +3047,7 @@ static int __init net_dev_init(void)
return
rc
;
}
f
s_initcall
(
net_dev_init
);
subsy
s_initcall
(
net_dev_init
);
EXPORT_SYMBOL
(
__dev_get
);
EXPORT_SYMBOL
(
__dev_get_by_flags
);
...
...
net/ipv4/tcp_ipv4.c
View file @
dbd4e27f
...
...
@@ -187,7 +187,7 @@ static inline int tcp_bind_conflict(struct sock *sk, struct tcp_bind_bucket *tb)
sk_for_each_bound
(
sk2
,
node
,
&
tb
->
owners
)
{
if
(
sk
!=
sk2
&&
!
ipv6_only_sock
(
sk2
)
&&
!
tcp_v6_ipv6only
(
sk2
)
&&
(
!
sk
->
sk_bound_dev_if
||
!
sk2
->
sk_bound_dev_if
||
sk
->
sk_bound_dev_if
==
sk2
->
sk_bound_dev_if
))
{
...
...
net/llc/af_llc.c
View file @
dbd4e27f
...
...
@@ -250,41 +250,19 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr)
if
(
!
sk
->
sk_zapped
)
goto
out
;
/* bind to a specific sap, optional. */
if
(
!
addr
->
sllc_sap
)
{
rc
=
-
EUSERS
;
addr
->
sllc_sap
=
llc_ui_autoport
();
if
(
!
addr
->
sllc_sap
)
goto
out
;
}
sap
=
llc_sap_find
(
addr
->
sllc_sap
);
if
(
!
sap
)
{
sap
=
llc_sap_open
(
addr
->
sllc_sap
,
NULL
);
rc
=
-
EBUSY
;
/* some other network layer is using the sap */
if
(
!
sap
)
goto
out
;
}
else
{
struct
llc_addr
laddr
,
daddr
;
struct
sock
*
ask
;
memset
(
&
laddr
,
0
,
sizeof
(
laddr
));
memset
(
&
daddr
,
0
,
sizeof
(
daddr
));
/*
* FIXME: check if the the address is multicast,
* only SOCK_DGRAM can do this.
*/
memcpy
(
laddr
.
mac
,
addr
->
sllc_mac
,
IFHWADDRLEN
);
laddr
.
lsap
=
addr
->
sllc_sap
;
rc
=
-
EADDRINUSE
;
/* mac + sap clash. */
ask
=
llc_lookup_established
(
sap
,
&
daddr
,
&
laddr
);
if
(
ask
)
{
sock_put
(
ask
);
goto
out
;
}
}
llc
->
laddr
.
lsap
=
addr
->
sllc_sap
;
if
(
llc
->
dev
)
memcpy
(
llc
->
laddr
.
mac
,
llc
->
dev
->
dev_addr
,
IFHWADDRLEN
);
rc
=
-
ENODEV
;
llc
->
dev
=
dev_getfirstbyhwtype
(
addr
->
sllc_arphrd
);
if
(
!
llc
->
dev
)
goto
out
;
rc
=
-
EUSERS
;
llc
->
laddr
.
lsap
=
llc_ui_autoport
();
if
(
!
llc
->
laddr
.
lsap
)
goto
out
;
rc
=
-
EBUSY
;
/* some other network layer is using the sap */
sap
=
llc_sap_open
(
llc
->
laddr
.
lsap
,
NULL
);
if
(
!
sap
)
goto
out
;
memcpy
(
llc
->
laddr
.
mac
,
llc
->
dev
->
dev_addr
,
IFHWADDRLEN
);
memcpy
(
&
llc
->
addr
,
addr
,
sizeof
(
llc
->
addr
));
/* assign new connection to its SAP */
llc_sap_add_socket
(
sap
,
sk
);
...
...
@@ -315,6 +293,8 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
{
struct
sockaddr_llc
*
addr
=
(
struct
sockaddr_llc
*
)
uaddr
;
struct
sock
*
sk
=
sock
->
sk
;
struct
llc_opt
*
llc
=
llc_sk
(
sk
);
struct
llc_sap
*
sap
;
int
rc
=
-
EINVAL
;
dprintk
(
"%s: binding %02X
\n
"
,
__FUNCTION__
,
addr
->
sllc_sap
);
...
...
@@ -323,8 +303,43 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
rc
=
-
EAFNOSUPPORT
;
if
(
addr
->
sllc_family
!=
AF_LLC
)
goto
out
;
/* use autobind, to avoid code replication. */
rc
=
llc_ui_autobind
(
sock
,
addr
);
if
(
!
addr
->
sllc_sap
)
{
rc
=
-
EUSERS
;
addr
->
sllc_sap
=
llc_ui_autoport
();
if
(
!
addr
->
sllc_sap
)
goto
out
;
}
sap
=
llc_sap_find
(
addr
->
sllc_sap
);
if
(
!
sap
)
{
sap
=
llc_sap_open
(
addr
->
sllc_sap
,
NULL
);
rc
=
-
EBUSY
;
/* some other network layer is using the sap */
if
(
!
sap
)
goto
out
;
}
else
{
struct
llc_addr
laddr
,
daddr
;
struct
sock
*
ask
;
memset
(
&
laddr
,
0
,
sizeof
(
laddr
));
memset
(
&
daddr
,
0
,
sizeof
(
daddr
));
/*
* FIXME: check if the the address is multicast,
* only SOCK_DGRAM can do this.
*/
memcpy
(
laddr
.
mac
,
addr
->
sllc_mac
,
IFHWADDRLEN
);
laddr
.
lsap
=
addr
->
sllc_sap
;
rc
=
-
EADDRINUSE
;
/* mac + sap clash. */
ask
=
llc_lookup_established
(
sap
,
&
daddr
,
&
laddr
);
if
(
ask
)
{
sock_put
(
ask
);
goto
out
;
}
}
llc
->
laddr
.
lsap
=
addr
->
sllc_sap
;
memcpy
(
llc
->
laddr
.
mac
,
addr
->
sllc_mac
,
IFHWADDRLEN
);
memcpy
(
&
llc
->
addr
,
addr
,
sizeof
(
llc
->
addr
));
/* assign new connection to its SAP */
llc_sap_add_socket
(
sap
,
sk
);
rc
=
sk
->
sk_zapped
=
0
;
out:
return
rc
;
}
...
...
@@ -399,15 +414,7 @@ static int llc_ui_connect(struct socket *sock, struct sockaddr *uaddr,
llc
->
daddr
.
lsap
=
addr
->
sllc_sap
;
memcpy
(
llc
->
daddr
.
mac
,
addr
->
sllc_mac
,
IFHWADDRLEN
);
}
if
(
!
llc
->
dev
)
{
rc
=
-
ENODEV
;
dev
=
dev_getfirstbyhwtype
(
addr
->
sllc_arphrd
);
if
(
!
dev
)
goto
out
;
llc
->
dev
=
dev
;
memcpy
(
llc
->
laddr
.
mac
,
llc
->
dev
->
dev_addr
,
IFHWADDRLEN
);
}
else
dev
=
llc
->
dev
;
dev
=
llc
->
dev
;
if
(
sk
->
sk_type
!=
SOCK_STREAM
)
goto
out
;
rc
=
-
EALREADY
;
...
...
@@ -610,7 +617,7 @@ static int llc_ui_accept(struct socket *sock, struct socket *newsock, int flags)
int
rc
=
-
EOPNOTSUPP
;
dprintk
(
"%s: accepting on %02X
\n
"
,
__FUNCTION__
,
llc_sk
(
sk
)
->
addr
.
sllc_
sap
);
llc_sk
(
sk
)
->
laddr
.
l
sap
);
lock_sock
(
sk
);
if
(
sk
->
sk_type
!=
SOCK_STREAM
)
goto
out
;
...
...
@@ -622,7 +629,7 @@ static int llc_ui_accept(struct socket *sock, struct socket *newsock, int flags)
if
(
rc
)
goto
out
;
dprintk
(
"%s: got a new connection on %02X
\n
"
,
__FUNCTION__
,
llc_sk
(
sk
)
->
addr
.
sllc_
sap
);
llc_sk
(
sk
)
->
laddr
.
l
sap
);
skb
=
skb_dequeue
(
&
sk
->
sk_receive_queue
);
rc
=
-
EINVAL
;
if
(
!
skb
->
sk
)
...
...
@@ -747,13 +754,7 @@ static int llc_ui_sendmsg(struct kiocb *iocb, struct socket *sock,
if
(
rc
)
goto
release
;
}
if
(
!
llc
->
dev
)
{
rc
=
-
ENODEV
;
dev
=
dev_getfirstbyhwtype
(
addr
->
sllc_arphrd
);
if
(
!
dev
)
goto
release
;
}
else
dev
=
llc
->
dev
;
dev
=
llc
->
dev
;
hdrlen
=
dev
->
hard_header_len
+
llc_ui_header_len
(
sk
,
addr
);
size
=
hdrlen
+
len
;
if
(
size
>
dev
->
mtu
)
...
...
net/llc/llc_proc.c
View file @
dbd4e27f
...
...
@@ -48,8 +48,6 @@ static struct sock *llc_get_sk_idx(loff_t pos)
--
pos
;
}
read_unlock_bh
(
&
sap
->
sk_list
.
lock
);
if
(
!
pos
)
break
;
}
sk
=
NULL
;
found:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment