Btrfs: fix possible panic on unmount
[safe/jmp/linux-2.6] / fs / ncpfs / ncplib_kernel.c
index e4eb5ed..0ec6237 100644 (file)
@@ -10,7 +10,6 @@
  */
 
 
-#include <linux/config.h>
 
 #include "ncplib_kernel.h"
 
@@ -103,48 +102,47 @@ static inline void ncp_init_request_s(struct ncp_server *server, int subfunction
 }
 
 static inline char *
- ncp_reply_data(struct ncp_server *server, int offset)
+ncp_reply_data(struct ncp_server *server, int offset)
 {
        return &(server->packet[sizeof(struct ncp_reply_header) + offset]);
 }
 
-static inline __u8 BVAL(void* data)
+static inline u8 BVAL(void *data)
 {
-       return get_unaligned((__u8*)data);
+       return *(u8 *)data;
 }
 
-static __u8
- ncp_reply_byte(struct ncp_server *server, int offset)
+static u8 ncp_reply_byte(struct ncp_server *server, int offset)
 {
-       return get_unaligned((__u8 *) ncp_reply_data(server, offset));
+       return *(u8 *)ncp_reply_data(server, offset);
 }
 
-static inline __u16 WVAL_LH(void* data)
+static inline u16 WVAL_LH(void *data)
 {
-       return le16_to_cpu(get_unaligned((__le16*)data));
+       return get_unaligned_le16(data);
 }
 
-static __u16
- ncp_reply_le16(struct ncp_server *server, int offset)
+static u16
+ncp_reply_le16(struct ncp_server *server, int offset)
 {
-       return le16_to_cpu(get_unaligned((__le16 *) ncp_reply_data(server, offset)));
+       return get_unaligned_le16(ncp_reply_data(server, offset));
 }
 
-static __u16
- ncp_reply_be16(struct ncp_server *server, int offset)
+static u16
+ncp_reply_be16(struct ncp_server *server, int offset)
 {
-       return be16_to_cpu(get_unaligned((__be16 *) ncp_reply_data(server, offset)));
+       return get_unaligned_be16(ncp_reply_data(server, offset));
 }
 
-static inline __u32 DVAL_LH(void* data)
+static inline u32 DVAL_LH(void *data)
 {
-       return le32_to_cpu(get_unaligned((__le32*)data));
+       return get_unaligned_le32(data);
 }
 
 static __le32
- ncp_reply_dword(struct ncp_server *server, int offset)
+ncp_reply_dword(struct ncp_server *server, int offset)
 {
-       return get_unaligned((__le32 *) ncp_reply_data(server, offset));
+       return get_unaligned((__le32 *)ncp_reply_data(server, offset));
 }
 
 static inline __u32 ncp_reply_dword_lh(struct ncp_server* server, int offset) {
@@ -291,7 +289,7 @@ ncp_make_closed(struct inode *inode)
        int err;
 
        err = 0;
-       down(&NCP_FINFO(inode)->open_sem);      
+       mutex_lock(&NCP_FINFO(inode)->open_mutex);
        if (atomic_read(&NCP_FINFO(inode)->opened) == 1) {
                atomic_set(&NCP_FINFO(inode)->opened, 0);
                err = ncp_close_file(NCP_SERVER(inode), NCP_FINFO(inode)->file_handle);
@@ -301,7 +299,7 @@ ncp_make_closed(struct inode *inode)
                                NCP_FINFO(inode)->volNumber,
                                NCP_FINFO(inode)->dirEntNum, err);
        }
-       up(&NCP_FINFO(inode)->open_sem);
+       mutex_unlock(&NCP_FINFO(inode)->open_mutex);
        return err;
 }
 
@@ -727,9 +725,6 @@ ncp_del_file_or_subdir2(struct ncp_server *server,
        __le32 dirent;
 
        if (!inode) {
-#ifdef CONFIG_NCPFS_DEBUGDENTRY
-               PRINTK("ncpfs: ncpdel2: dentry->d_inode == NULL\n");
-#endif
                return 0xFF;    /* Any error */
        }
        volnum = NCP_FINFO(inode)->volNumber;
@@ -845,46 +840,6 @@ out:
        return result;
 }
 
-/* Search for everything */
-int ncp_search_for_file_or_subdir(struct ncp_server *server,
-                                 struct nw_search_sequence *seq,
-                                 struct nw_info_struct *target)
-{
-       int result;
-
-       ncp_init_request(server);
-       ncp_add_byte(server, 3);        /* subfunction */
-       ncp_add_byte(server, server->name_space[seq->volNumber]);
-       ncp_add_byte(server, 0);        /* data stream (???) */
-       ncp_add_word(server, cpu_to_le16(0x8006));      /* Search attribs */
-       ncp_add_dword(server, RIM_ALL);         /* return info mask */
-       ncp_add_mem(server, seq, 9);
-#ifdef CONFIG_NCPFS_NFS_NS
-       if (server->name_space[seq->volNumber] == NW_NS_NFS) {
-               ncp_add_byte(server, 0);        /* 0 byte pattern */
-       } else 
-#endif
-       {
-               ncp_add_byte(server, 2);        /* 2 byte pattern */
-               ncp_add_byte(server, 0xff);     /* following is a wildcard */
-               ncp_add_byte(server, '*');
-       }
-       
-       if ((result = ncp_request(server, 87)) != 0)
-               goto out;
-       memcpy(seq, ncp_reply_data(server, 0), sizeof(*seq));
-       ncp_extract_file_info(ncp_reply_data(server, 10), target);
-
-       ncp_unlock_server(server);
-       
-       result = ncp_obtain_nfs_info(server, target);
-       return result;
-
-out:
-       ncp_unlock_server(server);
-       return result;
-}
-
 int ncp_search_for_fileset(struct ncp_server *server,
                           struct nw_search_sequence *seq,
                           int* more,
@@ -1050,8 +1005,8 @@ ncp_read_bounce(struct ncp_server *server, const char *file_id,
        result = ncp_request2(server, 72, bounce, bufsize);
        ncp_unlock_server(server);
        if (!result) {
-               int len = be16_to_cpu(get_unaligned((__be16*)((char*)bounce + 
-                         sizeof(struct ncp_reply_header))));
+               int len = get_unaligned_be16((char *)bounce +
+                         sizeof(struct ncp_reply_header));
                result = -EIO;
                if (len <= to_read) {
                        char* source;
@@ -1158,11 +1113,13 @@ ncp__io2vol(struct ncp_server *server, unsigned char *vname, unsigned int *vlen,
 
                if (NCP_IS_FLAG(server, NCP_FLAG_UTF8)) {
                        int k;
+                       unicode_t u;
 
-                       k = utf8_mbtowc(&ec, iname, iname_end - iname);
-                       if (k < 0)
+                       k = utf8_to_utf32(iname, iname_end - iname, &u);
+                       if (k < 0 || u > MAX_WCHAR_T)
                                return -EINVAL;
                        iname += k;
+                       ec = u;
                } else {
                        if (*iname == NCP_ESC) {
                                int k;
@@ -1259,7 +1216,7 @@ ncp__vol2io(struct ncp_server *server, unsigned char *iname, unsigned int *ilen,
                if (NCP_IS_FLAG(server, NCP_FLAG_UTF8)) {
                        int k;
 
-                       k = utf8_wctomb(iname, ec, iname_end - iname);
+                       k = utf32_to_utf8(ec, iname, iname_end - iname);
                        if (k < 0) {
                                err = -ENAMETOOLONG;
                                goto quit;