Changes by: antona
Update of /cvsroot/linux-ntfs/ntfs-driver-tng/linux/fs/ntfs
In directory usw-pr-cvs1:/tmp/cvs-serv26232/linux/fs/ntfs
Modified Files:
aops.c attrib.c attrib.h compress.c dir.c inode.c mft.c
super.c types.h
Log Message:
Replace run list spinlock with a semaphore.
Index: aops.c
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfs-driver-tng/linux/fs/ntfs/aops.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -U2 -r1.55 -r1.56
--- aops.c 4 Mar 2002 22:56:14 -0000 1.55
+++ aops.c 6 Mar 2002 16:01:26 -0000 1.56
@@ -101,7 +101,7 @@
/* Convert the vcn to the corresponding logical cluster number (lcn). */
- read_lock(&ni->run_list.lock);
+ down_read(&ni->run_list.lock);
lcn = vcn_to_lcn(ni->run_list.rl, vcn);
- read_unlock(&ni->run_list.lock);
+ up_read(&ni->run_list.lock);
/* Successful remap. */
if (lcn >= 0) {
@@ -298,7 +298,7 @@
return 0;
}
- read_lock(&vol->mftbmp_rl.lock);
+ down_read(&vol->mftbmp_rl.lock);
lcn = vcn_to_lcn(vol->mftbmp_rl.rl, vcn);
- read_unlock(&vol->mftbmp_rl.lock);
+ up_read(&vol->mftbmp_rl.lock);
ntfs_debug("lcn = 0x%Lx.", (long long)lcn);
if (lcn < 0LL) {
Index: attrib.c
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfs-driver-tng/linux/fs/ntfs/attrib.c,v
retrieving revision 1.69
retrieving revision 1.70
diff -U2 -r1.69 -r1.70
--- attrib.c 5 Mar 2002 02:35:02 -0000 1.69
+++ attrib.c 6 Mar 2002 16:01:26 -0000 1.70
@@ -832,5 +832,5 @@
/* Lock the run list. */
- write_lock(&ni->run_list.lock);
+ down_write(&ni->run_list.lock);
/* Make sure someone else didn't do the work while we were spinning. */
@@ -850,5 +850,5 @@
/* Unlock the run list. */
- write_unlock(&ni->run_list.lock);
+ up_write(&ni->run_list.lock);
put_attr_search_ctx(ctx);
Index: attrib.h
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfs-driver-tng/linux/fs/ntfs/attrib.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -U2 -r1.17 -r1.18
--- attrib.h 4 Mar 2002 22:56:14 -0000 1.17
+++ attrib.h 6 Mar 2002 16:01:26 -0000 1.18
@@ -31,4 +31,10 @@
#include "layout.h"
+static inline void init_run_list(run_list *rl)
+{
+ rl->rl = NULL;
+ init_rwsem(&rl->lock);
+}
+
typedef enum {
LCN_HOLE = -1, /* Keep this as highest value or die! */
Index: compress.c
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfs-driver-tng/linux/fs/ntfs/compress.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -U2 -r1.34 -r1.35
--- compress.c 4 Mar 2002 22:56:14 -0000 1.34
+++ compress.c 6 Mar 2002 16:01:26 -0000 1.35
@@ -570,7 +570,7 @@
}
/* Find lcn of vcn and convert it into blocks. */
- read_lock(&ni->run_list.lock);
+ down_read(&ni->run_list.lock);
lcn = vcn_to_lcn(ni->run_list.rl, vcn);
- read_unlock(&ni->run_list.lock);
+ up_read(&ni->run_list.lock);
ntfs_debug("Reading vcn = 0x%Lx, lcn = 0x%Lx.",
(long long)vcn, (long long)lcn);
Index: dir.c
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfs-driver-tng/linux/fs/ntfs/dir.c,v
retrieving revision 1.48
retrieving revision 1.49
diff -U2 -r1.48 -r1.49
--- dir.c 4 Mar 2002 22:56:14 -0000 1.48
+++ dir.c 6 Mar 2002 16:01:26 -0000 1.49
@@ -540,10 +540,8 @@
if (filp->f_pos == 1) {
ntfs_debug("Calling filldir for .. with len 2, f_pos 0x1, "
- "inode 0x%Lx, DT_DIR.",
- (unsigned long long)NTFS_I(
- filp->f_dentry->d_parent->d_inode)->mft_no);
+ "inode 0x%lx, DT_DIR.",
+ parent_ino(filp->f_dentry));
rc = filldir(dirent, "..", 2, filp->f_pos,
- filp->f_dentry->d_parent->d_inode->i_ino,
- DT_DIR);
+ parent_ino(filp->f_dentry), DT_DIR);
if (rc)
goto done;
Index: inode.c
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfs-driver-tng/linux/fs/ntfs/inode.c,v
retrieving revision 1.72
retrieving revision 1.73
diff -U2 -r1.72 -r1.73
--- inode.c 5 Mar 2002 00:00:04 -0000 1.72
+++ inode.c 6 Mar 2002 16:01:26 -0000 1.73
@@ -78,11 +78,11 @@
atomic_set(&ni->count, 1);
ni->vol = NULL;
- INIT_RUN_LIST(&ni->run_list);
+ init_run_list(&ni->run_list);
init_rwsem(&ni->mrec_lock);
atomic_set(&ni->mft_count, 0);
ni->page = NULL;
ni->attr_list = NULL;
- INIT_RUN_LIST(&ni->attr_list_rl);
- INIT_RUN_LIST(&ni->_IDM(bmp_rl));
+ init_run_list(&ni->attr_list_rl);
+ init_run_list(&ni->_IDM(bmp_rl));
init_MUTEX(&ni->extent_lock);
ni->_INE(base_ntfs_ino) = NULL;
@@ -1305,15 +1305,15 @@
}
/* Free all alocated memory. */
- write_lock(&ni->run_list.lock);
+ down_write(&ni->run_list.lock);
ntfs_free(ni->run_list.rl);
ni->run_list.rl = NULL;
- write_unlock(&ni->run_list.lock);
+ up_write(&ni->run_list.lock);
ntfs_free(ni->attr_list);
- write_lock(&ni->attr_list_rl.lock);
+ down_write(&ni->attr_list_rl.lock);
ntfs_free(ni->attr_list_rl.rl);
ni->attr_list_rl.rl = NULL;
- write_unlock(&ni->attr_list_rl.lock);
+ up_write(&ni->attr_list_rl.lock);
}
@@ -1343,7 +1343,7 @@
if (S_ISDIR(vi->i_mode)) {
- write_lock(&ni->_IDM(bmp_rl).lock);
+ down_write(&ni->_IDM(bmp_rl).lock);
ntfs_free(ni->_IDM(bmp_rl).rl);
- write_unlock(&ni->_IDM(bmp_rl).lock);
+ up_write(&ni->_IDM(bmp_rl).lock);
}
return;
Index: mft.c
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfs-driver-tng/linux/fs/ntfs/mft.c,v
retrieving revision 1.51
retrieving revision 1.52
diff -U2 -r1.51 -r1.52
--- mft.c 4 Mar 2002 22:56:14 -0000 1.51
+++ mft.c 6 Mar 2002 16:01:26 -0000 1.52
@@ -206,7 +206,7 @@
vol->cluster_size_mask;
/* Convert the vcn to the corresponding lcn. */
- read_lock(&ni->run_list.lock);
+ down_read(&ni->run_list.lock);
lcn = vcn_to_lcn(ni->run_list.rl, vcn);
- read_unlock(&ni->run_list.lock);
+ up_read(&ni->run_list.lock);
if (lcn >= 0) {
/* Setup buffer head to correct block. */
Index: super.c
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfs-driver-tng/linux/fs/ntfs/super.c,v
retrieving revision 1.81
retrieving revision 1.82
diff -U2 -r1.81 -r1.82
--- super.c 5 Mar 2002 00:25:07 -0000 1.81
+++ super.c 6 Mar 2002 16:01:26 -0000 1.82
@@ -1132,8 +1132,8 @@
vol->mftbmp_mapping.host = NULL;
up_write(&vol->mftbmp_lock);
- write_lock(&vol->mftbmp_rl.lock);
+ down_write(&vol->mftbmp_rl.lock);
ntfs_free(vol->mftbmp_rl.rl);
vol->mftbmp_rl.rl = NULL;
- write_unlock(&vol->mftbmp_rl.lock);
+ up_write(&vol->mftbmp_rl.lock);
vol->upcase_len = 0;
/*
@@ -1509,5 +1509,5 @@
#endif
spin_lock_init(&vol->mftbmp_mapping.i_shared_lock);
- INIT_RUN_LIST(&vol->mftbmp_rl);
+ init_run_list(&vol->mftbmp_rl);
vol->mftmirr_ino = NULL;
vol->lcnbmp_ino = NULL;
Index: types.h
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfs-driver-tng/linux/fs/ntfs/types.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -U2 -r1.5 -r1.6
--- types.h 5 Mar 2002 00:22:24 -0000 1.5
+++ types.h 6 Mar 2002 16:01:26 -0000 1.6
@@ -68,16 +68,6 @@
typedef struct {
run_list_element *rl;
- rwlock_t lock;
+ struct rw_semaphore lock;
} run_list;
-
-#define RUN_LIST_INIT { NULL, RW_LOCK_UNLOCKED }
-
-#define RUN_LIST(name) run_list name = RUN_LIST_INIT
-
-#define INIT_RUN_LIST(runlist) do { \
- run_list *___rl = runlist; \
- ___rl->rl = NULL; \
- ___rl->lock = RW_LOCK_UNLOCKED; \
- } while (0)
typedef enum {
|