All of lore.kernel.org
 help / color / mirror / Atom feed
* + reiser4-drop-unused-semaphores.patch added to -mm tree
@ 2007-02-28  6:32 akpm
  0 siblings, 0 replies; only message in thread
From: akpm @ 2007-02-28  6:32 UTC (permalink / raw)
  To: mm-commits; +Cc: edward


The patch titled
     reiser4: drop unused semaphores
has been added to the -mm tree.  Its filename is
     reiser4-drop-unused-semaphores.patch

*** Remember to use Documentation/SubmitChecklist when testing your code ***

See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find
out what to do about this

------------------------------------------------------
Subject: reiser4: drop unused semaphores
From: Edward Shishkin <edward@namesys.com>

. Drop artefact semaphores:
   - mutex_write (in common part of reiser4 inode)
   - lock (in cryptcompress specific part of reiser4 inode)

. Add missed remove_suid() in write_cryptcompress()

Signed-off-by: Edward Shishkin <edward@namesys.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---

 fs/reiser4/inode.h                       |   11 -----
 fs/reiser4/plugin/file/cryptcompress.c   |   46 +++++----------------
 fs/reiser4/plugin/file/cryptcompress.h   |    1 
 fs/reiser4/plugin/file/file.c            |    9 ----
 fs/reiser4/plugin/file/file_conversion.c |    3 -
 fs/reiser4/plugin/item/extent_file_ops.c |    2 
 fs/reiser4/super_ops.c                   |    1 
 7 files changed, 13 insertions(+), 60 deletions(-)

diff -puN fs/reiser4/inode.h~reiser4-drop-unused-semaphores fs/reiser4/inode.h
--- a/fs/reiser4/inode.h~reiser4-drop-unused-semaphores
+++ a/fs/reiser4/inode.h
@@ -136,17 +136,6 @@ struct reiser4_inode {
 		cryptcompress_info_t cryptcompress_info;
 	} file_plugin_data;
 
- 	/* this semaphore is used to serialize writes of any file plugin,
-	 * and should be invariant during file plugin conversion (which
-	 * is going in the context of ->write()).
- 	 * inode->i_mutex can not be used for the serialization, because
- 	 * write_unix_file uses get_user_pages which is to be used under
- 	 * mm->mmap_sem and because it is required to take mm->mmap_sem before
- 	 * inode->i_mutex, so inode->i_mutex would have to be up()-ed before
- 	 * calling to get_user_pages which is unacceptable.
-	 */
- 	struct semaphore mutex_write;
-
 	/* this semaphore is to serialize readers and writers of @pset->file
 	 * when file plugin conversion is enabled
 	 */
diff -puN fs/reiser4/plugin/file/cryptcompress.c~reiser4-drop-unused-semaphores fs/reiser4/plugin/file/cryptcompress.c
--- a/fs/reiser4/plugin/file/cryptcompress.c~reiser4-drop-unused-semaphores
+++ a/fs/reiser4/plugin/file/cryptcompress.c
@@ -38,7 +38,6 @@ void init_inode_data_cryptcompress(struc
 
 	memset(data, 0, sizeof(*data));
 
-	init_rwsem(&data->lock);
 	toggle_compression(data, 1);
 	init_inode_ordering(inode, crd, create);
 }
@@ -2783,24 +2782,28 @@ ssize_t write_cryptcompress(struct file 
 	if (IS_ERR(ctx))
 		return PTR_ERR(ctx);
 
-  	down(&reiser4_inode_data(inode)->mutex_write);
+ 	mutex_lock(&inode->i_mutex);
 
 	result = generic_write_checks(file, &pos, &count, 0);
   	if (unlikely(result != 0))
 		goto out;
   	if (unlikely(count == 0))
 		goto out;
-	down_write(&info->lock);
+	result = remove_suid(file->f_dentry);
+	if (unlikely(result != 0))
+		goto out;
+	/* remove_suid might create a transaction */
+	reiser4_txn_restart(ctx);
+
 	result = write_cryptcompress_flow(file, inode, buf, count, pos, conv);
-  	if (*conv == 0)
-  		up_write(&info->lock);
 
   	if (result < 0)
 		goto out;
   	/* update position in a file */
   	*off = pos + result;
  out:
-	up(&reiser4_inode_data(inode)->mutex_write);
+	mutex_unlock(&inode->i_mutex);
+
 	context_set_commit_async(ctx);
 	reiser4_exit_context(ctx);
 	return result;
@@ -2871,12 +2874,10 @@ ssize_t read_cryptcompress(struct file *
 		return result;
 	}
 
-	down_read(&info->lock);
 	LOCK_CNT_INC(inode_sem_r);
 
 	result = do_sync_read(file, buf, size, off);
 
-	up_read(&info->lock);
 	LOCK_CNT_DEC(inode_sem_r);
 
 	context_set_commit_async(ctx);
@@ -3562,16 +3563,6 @@ writepages_cryptcompress(struct address_
 	do {
 		reiser4_context *ctx;
 
-		if (is_in_reiser4_context()) {
-			/* It can be in the context of write system call from
-			   balance_dirty_pages() */
-			if (down_read_trylock(&info->lock) == 0) {
-				result = RETERR(-EBUSY);
-				break;
-			}
-		} else
-			down_read(&info->lock);
-
 		ctx = reiser4_init_context(inode->i_sb);
 		if (IS_ERR(ctx)) {
 			result = PTR_ERR(ctx);
@@ -3588,10 +3579,6 @@ writepages_cryptcompress(struct address_
 		    capture_anonymous_clusters(inode->i_mapping, &index,
 					       to_capture);
 
-		up_read(&info->lock);
-
-		LOCK_CNT_DEC(inode_sem_r);
-
 		if (result != 0 || wbc->sync_mode != WB_SYNC_ALL) {
 			reiser4_exit_context(ctx);
 			break;
@@ -3647,13 +3634,12 @@ int mmap_cryptcompress(struct file *file
 int delete_object_cryptcompress(struct inode *inode)
 {
 	int result;
-	cryptcompress_info_t *info = cryptcompress_inode_data(inode);
+
 	assert("edward-429", inode->i_nlink == 0);
 
 	reiser4_txn_restart_current();
-	down_write(&info->lock);
+
 	result = cryptcompress_truncate(inode, 0, 0);
-	up_write(&info->lock);
 	if (result) {
 		warning("edward-430",
 			"cannot truncate cryptcompress file  %lli: %i",
@@ -3677,16 +3663,11 @@ int setattr_cryptcompress(struct dentry 
 		if (inode->i_size != attr->ia_size) {
 			reiser4_context *ctx;
 			loff_t old_size;
-			cryptcompress_info_t *info =
-			    cryptcompress_inode_data(inode);
 
 			ctx = reiser4_init_context(dentry->d_inode->i_sb);
 			if (IS_ERR(ctx))
 				return PTR_ERR(ctx);
 
-			down_write(&info->lock);
-			LOCK_CNT_INC(inode_sem_w);
-
 			inode_check_scale(inode, inode->i_size, attr->ia_size);
 
 			old_size = inode->i_size;
@@ -3702,8 +3683,6 @@ int setattr_cryptcompress(struct dentry 
 					get_inode_oid(inode), old_size,
 					attr->ia_size, result);
 			}
-			up_write(&info->lock);
-			LOCK_CNT_DEC(inode_sem_w);
 			context_set_commit_async(ctx);
 			reiser4_exit_context(ctx);
 		} else
@@ -3736,9 +3715,8 @@ sendfile_cryptcompress(struct file *file
 	if (result)
 		goto exit;
 	info = cryptcompress_inode_data(inode);
-	down_read(&info->lock);
+
 	result = generic_file_sendfile(file, ppos, count, actor, target);
-	up_read(&info->lock);
  exit:
 	reiser4_exit_context(ctx);
 	return result;
diff -puN fs/reiser4/plugin/file/cryptcompress.h~reiser4-drop-unused-semaphores fs/reiser4/plugin/file/cryptcompress.h
--- a/fs/reiser4/plugin/file/cryptcompress.h~reiser4-drop-unused-semaphores
+++ a/fs/reiser4/plugin/file/cryptcompress.h
@@ -445,7 +445,6 @@ static inline void dec_keyload_count(cry
 
 /* cryptcompress specific part of reiser4_inode */
 typedef struct cryptcompress_info {
-	struct rw_semaphore lock;
 	crypto_stat_t *crypt;
 	int compress_toggle;      /* current status of compressibility
 				     is set by compression mode plugin */
diff -puN fs/reiser4/plugin/file/file.c~reiser4-drop-unused-semaphores fs/reiser4/plugin/file/file.c
--- a/fs/reiser4/plugin/file/file.c~reiser4-drop-unused-semaphores
+++ a/fs/reiser4/plugin/file/file.c
@@ -1933,7 +1933,6 @@ int mmap_unix_file(struct file *file, st
 
 	uf_info = unix_file_inode_data(inode);
 
-	down(&reiser4_inode_data(inode)->mutex_write);
 	get_exclusive_access(uf_info);
 
 	if (!IS_RDONLY(inode) && (vma->vm_flags & (VM_MAYWRITE | VM_SHARED))) {
@@ -1945,7 +1944,6 @@ int mmap_unix_file(struct file *file, st
 		result = find_file_state(inode, uf_info);
 		if (result != 0) {
 			drop_exclusive_access(uf_info);
-			up(&reiser4_inode_data(inode)->mutex_write);
 			reiser4_exit_context(ctx);
 			return result;
 		}
@@ -1961,7 +1959,6 @@ int mmap_unix_file(struct file *file, st
 			result = check_pages_unix_file(file, inode);
 			if (result) {
 				drop_exclusive_access(uf_info);
-				up(&reiser4_inode_data(inode)->mutex_write);
 				reiser4_exit_context(ctx);
 				return result;
 			}
@@ -1976,7 +1973,6 @@ int mmap_unix_file(struct file *file, st
 	result = reiser4_grab_space_force(needed, BA_CAN_COMMIT);
 	if (result) {
 		drop_exclusive_access(uf_info);
-		up(&reiser4_inode_data(inode)->mutex_write);
 		reiser4_exit_context(ctx);
 		return result;
 	}
@@ -1988,7 +1984,6 @@ int mmap_unix_file(struct file *file, st
 	}
 
 	drop_exclusive_access(uf_info);
-	up(&reiser4_inode_data(inode)->mutex_write);
 	reiser4_exit_context(ctx);
 	return result;
 }
@@ -2368,7 +2363,6 @@ int release_unix_file(struct inode *inod
 	if (in_reiser4 == 0) {
 		uf_info = unix_file_inode_data(inode);
 
-		down(&reiser4_inode_data(inode)->mutex_write);
 		get_exclusive_access(uf_info);
 		if (atomic_read(&file->f_dentry->d_count) == 1 &&
 		    uf_info->container == UF_CONTAINER_EXTENTS &&
@@ -2384,7 +2378,6 @@ int release_unix_file(struct inode *inod
 			}
 		}
 		drop_exclusive_access(uf_info);
-		up(&reiser4_inode_data(inode)->mutex_write);
 	} else {
 		/*
 		   we are within reiser4 context already. How latter is
@@ -2679,11 +2672,9 @@ int setattr_unix_file(struct dentry *den
 			return PTR_ERR(ctx);
 
 		uf_info = unix_file_inode_data(dentry->d_inode);
-		down(&reiser4_inode_data(dentry->d_inode)->mutex_write);
 		get_exclusive_access(uf_info);
 		result = setattr_truncate(dentry->d_inode, attr);
 		drop_exclusive_access(uf_info);
-		up(&reiser4_inode_data(dentry->d_inode)->mutex_write);
 		context_set_commit_async(ctx);
 		reiser4_exit_context(ctx);
 	} else
diff -puN fs/reiser4/plugin/file/file_conversion.c~reiser4-drop-unused-semaphores fs/reiser4/plugin/file/file_conversion.c
--- a/fs/reiser4/plugin/file/file_conversion.c~reiser4-drop-unused-semaphores
+++ a/fs/reiser4/plugin/file/file_conversion.c
@@ -443,14 +443,12 @@ static int cryptcompress2unixfile(struct
 	   reserved disk space) were released by ->kill_hook() method
 	   of the item plugin */
 
-	up_write(&cr_info->lock);
 	result = __cryptcompress2unixfile(file, inode);
 	if (result)
 		goto out;
 	/* At this point file is managed by unix file plugin */
 
 	uf_info = unix_file_inode_data(inode);
-	//	get_exclusive_access(uf_info);
 
 	assert("edward-1518",
 	       ergo(jprivate(clust->pages[0]),
@@ -467,7 +465,6 @@ static int cryptcompress2unixfile(struct
 		uf_info->container = UF_CONTAINER_EXTENTS;
 		complete_file_conversion(inode);
 	}
-	//	drop_exclusive_access(uf_info);
  out:
 	all_grabbed2free();
 	if (result)
diff -puN fs/reiser4/plugin/item/extent_file_ops.c~reiser4-drop-unused-semaphores fs/reiser4/plugin/item/extent_file_ops.c
--- a/fs/reiser4/plugin/item/extent_file_ops.c~reiser4-drop-unused-semaphores
+++ a/fs/reiser4/plugin/item/extent_file_ops.c
@@ -1030,9 +1030,9 @@ ssize_t reiser4_write_extent(struct file
 				/* wait for read completion */
 				lock_page(page);
 				BUG_ON(!PageUptodate(page));
-				unlock_page(page);
 			} else
 				result = 0;
+			unlock_page(page);
 		}
 
 		BUG_ON(get_current_context()->trans->atom != NULL);
diff -puN fs/reiser4/super_ops.c~reiser4-drop-unused-semaphores fs/reiser4/super_ops.c
--- a/fs/reiser4/super_ops.c~reiser4-drop-unused-semaphores
+++ a/fs/reiser4/super_ops.c
@@ -44,7 +44,6 @@ static void init_once(void *obj, struct 
 		 * etc. that will be added to our private inode part.
 		 */
 		INIT_LIST_HEAD(get_readdir_list(&info->vfs_inode));
-		sema_init(&info->p.mutex_write, 1);
 		init_rwsem(&info->p.conv_sem);
 		/* init semaphore which is used during inode loading */
 		loading_init_once(&info->p);
_

Patches currently in -mm which might be from edward@namesys.com are

reiser4-vs-streamline-generic_file_-interfaces-and-filemap-fix.patch
reiser4-rename-generic_sounding_globalspatch.patch
reiser4-use-generic-file-read-fix-readpages-unix-file.patch
reiser4-format-subversion-numbers-heir-set-and-file-conversion.patch
reiser4-format-subversion-numbers-heir-set-and-file-conversion-fix-readpages-cryptcompress.patch
reiser4-cleanups-in-lzo-compression-library.patch
reiser4-get-rid-of-deprecated-crypto-api.patch
reiser4-get-rid-of-deprecated-crypto-api-build-fix.patch
reiser4-fix-missed-unlock-and-exit_context.patch
reiser4-use-list_head-instead-of-struct-blocknr.patch
reiser4-use-list_empty-instead-of-list_empty_careful-for.patch
reiser4-update-comments-fix-write-and-truncate-cryptcompress.patch
reiser4-temp-fix.patch
reiser4-fix-write_extent-1.patch
fs-reiser4-possible-cleanups-2.patch
fs-reiser4-more-possible-cleanups.patch
reiser4-use-null-for-pointers.patch
reiser4-test_clear_page_dirty.patch
reiser4-fix-readpage_cryptcompress.patch
reiser4-improve-estimation-for-number-of-nodes-occupied.patch
reiser4-drop-check_cryptcompress.patch
reiser4-drop-unused-semaphores.patch
reiser4-use-dynamic-lattice-for-adaptive-compression.patch
reiser4-fix-freeze-and-corruption.patch
reiser4-vs-git-block.patch
reiser4-vs-git-block-2.patch
reiser4-vs-git-block3.patch

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2007-02-28  6:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-02-28  6:32 + reiser4-drop-unused-semaphores.patch added to -mm tree akpm

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.